python装饰器

10 Day Python之装饰器

删除回忆录丶 提交于 2020-04-05 18:14:32
装饰器 1、开放封闭原则 开放:对于添加新功能是开放的 封闭:对于修改原功能是封闭的 2、装饰器的作用 在不更改原函数调用方式的前提下对原函数添加新功能 3、装饰器 1 # ①引子——为什么要有装饰器 2 为了在不修改原函数的基础上为函数添加新功能,产生了装饰器 3 4 # ②简单装饰器 5 def deco(f): 6 def wrapper(): 7 """原函数前添加的功能""" 8 f() 9 """原函数后添加的功能""" 10 return wrapper 11 12 def func(): 13 print('这是原函数!') 14 15 func = deco(func) 16 func() 17 18 # ③装饰器的语法糖 19 def deco(f): 20 def wrapper(): 21 """原函数前添加的功能""" 22 f() 23 """原函数后添加的功能""" 24 return wrapper 25 26 @deco # ——>此处效果等同于 func = deco(func) 27 def func(): 28 print('这是原函数') 29 30 func() 31 32 # ④带返回值的装饰器 33 def deco(f): 34 def wrapper(): 35 """原函数前添加的功能""" 36 res = f() 37 ""

Python的装饰器

ⅰ亾dé卋堺 提交于 2020-04-01 12:13:15
装饰器 1、装饰器的知识点储备 """ 1、*args,**kwargs:形参中的作用汇总:*args是元组形式,**kwargs字典形式 2、*args,**kwargs:实参中的作用展开: """ # 一、储备知识 # 需求:我们要把传给wrapper的参数,原封不动的转嫁给index函数 # 1、*args和**kwargs # def index(x,y): # print(x,y) # def wrapper(*args,**kwargs): # 形参中汇总: *args=(1,2,3,4,5),**kwargs={"a":1,"b":2} # index(*args,**kwargs) # 实参中展开: index(*(1,2,3,4,5),**{"a":1,"b":2}) # index(1,2,3,4,5,a=1,b=2) # wrapper(1,2,3,4,5,a=1,b=2) # 只要语法不错就可随意传,但是此处运行后会报错,因为index(x,y) # TypeError: index() got an unexpected keyword argument 'a' # wrapper(1,y=2) # wrapper(y=2,x=1) # 2、名称空间与作用域:名称空间的“嵌套”关系实在函数定义阶段,即检测语法的时候确定的。 # 名称空间的特点

python面试1-30题

泪湿孤枕 提交于 2020-03-30 06:25:17
1、一行代码实现1--100之和 利用sum()函数求和 2、如何在一个函数内部修改全局变量 利用global 修改全局变量 3、列出5个python标准库 os:提供了不少与操作系统相关联的函数 sys: 通常用于命令行参数 re: 正则匹配 math: 数学运算 datetime:处理日期时间 4、字典如何删除键和合并两个字典 del和update方法 5、谈下python的GIL GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。 多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大 6、python实现列表去重的方法 先通过集合去重,在转列表 7、fun(*args,**kwargs)中的*args,**kwargs什么意思? 8、python2和python3的range(100)的区别 python2返回列表,python3返回迭代器,节约内存 9、一句话解释什么样的语言能够用装饰器?

学习Python装饰器,看这一篇文章就够了

一世执手 提交于 2020-03-27 21:39:54
讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切。 谈装饰器前,还要先要明白一件事,Python 中的函数和 Java、C++不太一样,Python 中的函数可以像普通变量一样当做参数传递给另外一个函数,例如: 先来看一个简单例子,虽然实际代码可能比这复杂很多: 说到这里。顺便提醒下大家不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你缺新项目练习或者没有python精讲教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新教程项目,还可以跟老司机交流讨教! 现在有一个新的需求,希望可以记录下函数的执行日志,于是在代码中添加日志代码: 简单装饰器 @ 语法糖 *args、**kwargs可能有人问,如果我的业务逻辑函数 foo 需要参数怎么办?比如: 我们可以在定义 wrapper 函数的时候指定参数: 比如: 这时,你就可以把 wrapper 函数指定关键字函数: 带参数的装饰器 @use_logging(level="warn")等价于@decorator 类装饰器 functools.wraps 例子: 装饰器顺序一个函数还可以同时定义多个装饰器,比如: 总结:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心

Python小技巧:用类写装饰器的正确方法,一般新手都不知道

一曲冷凌霜 提交于 2020-03-27 15:54:53
装饰器是一个返回函数的函数。写一个装饰器,除了最常见的在函数中定义函数以外,Python还允许使用类来定义一个装饰器。 pS注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你缺新项目练习或者没有python精讲教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新教程项目,还可以跟老司机交流讨教! 1、用类写装饰器 下面用常见的写法实现了一个缓存装饰器。 def cache (func): data = {} def wrapper(*args, **kwargs): key = f '{func.__name__}-{str(args)}-{str(kwargs)})' if key in data : result = data.get( key ) print( 'cached' ) else : result = func(*args, **kwargs) data [ key ] = result print( 'calculated' ) return result return wrapper 看看缓存的效果。 @cache def rectangle_area(length, width): return length * width rectangle_area( 2 , 3 ) #

Python- 装饰器

纵饮孤独 提交于 2020-03-26 23:28:22
一、装饰器   目录     1、装饰器定义     2、装饰器原则     3、装饰器练习     4、装饰器高级版 二、    1、定义:       本质是函数,就是为其他函数附加功能    2、原则:       1、不能修改被装饰的函数的源代码       2、不能修改被修饰的函数的调用方式   3、练习 1 def demo1(func): 2 def doca(*args,**kwargs): 3 func(*args,**kwargs) 4 print('我是显示器') 5 return doca 6 7 @demo1 8 def b1(): 9 print('源代码1') 10 11 @demo1 12 def b2(name,age): 13 print('源代码2',name,age) 14 15 16 b1() 17 b2('alex',23)   4、高级版       1、需求是,test1、test2、test3假如是三种不同平台要登录,所验证的方式不一样 1 user,pwd='123','123' 2 def auto(auto_type): 3 def worapps_type(func): 4 def worapps(*args,**kwargs): 5 if auto_type == 'ldouc': 6 username=input(

从零开始学python

丶灬走出姿态 提交于 2020-03-25 03:03:33
自从20世纪90年代初Python语言诞生至今,它已被广泛应用于系统管理任务的处理和Web编程。今天就来给大家看看学Python的五大优势吧! NO.1 全球三大主流编程语言之一 python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库。它已经成为继Java、C++之后的第三大语言,相对于其他语言,它的特点是:简单易学、可移植、可扩展、可嵌入、 丰富的库、免费开源等, Python难度低于java,更适合初学编程者。 NO.2 高效可靠的编程语言 我相信任何使用过 Python 的开发人员都会认同它的运行速度、可靠性以及效率。你可以在各种环境下使用或者部署 Python,它只会有可忽略不计的性能损失。 再次强调,因为 Python 的多样性,意味着你可以横跨多个领域,绝不仅限于 Web 开发、桌面程序、移动应用,甚至包含硬件开发等。所以你并没有被束缚在单一的平台之上,Python 的经验可用于任何平台。 无论你是面向过程、面向对象,或者是函数式编程的爱好者,都可以在 Python找到适合自己的语言范式。什么,这年头还有人写面向过程的代码?是的,比如嵌入式系统,面向过程的设计理念仍大行其道。 Python 能让所有人更好的过渡,并直达顶峰。 NO.3 无所不在的编程语言 Python应用特别广,国内越来越多企业热衷于Python语言,像豆瓣、搜狐、知乎、网易、 阿里

Python Day18 Homework

拥有回忆 提交于 2020-03-25 02:36:29
# # 作业:import timefrom functools import wraps### # 1、编写课上讲解的有参装饰器准备明天默写# def otter(r_type):# def auto(func):# @wraps(func)# def wrapper(*args, **kwargs):# in_name = input('输入姓名:')# in_password = input('输入密码:')# if r_type == 'file':# with open('db.txt')as f:# for i in f:# name, password = i.strip().split(':')# if name == in_name and password == in_password:# print('登录正确')# res = func(*args, **kwargs)# return res# break# else:# print('未登录')# elif r_type == 'mysql':# print('mysql')# else:# print('other')## return wrapper## return auto### @otter(r_type='file')# def run():# print('run====>')### run

python: 单例装饰器

给你一囗甜甜゛ 提交于 2020-03-24 18:43:56
3 月,跳不动了?>>> singleton 的三种写法 # # instance_map = {} # # # def get_instance(cls, *args, **kwargs): # if cls not in instance_map: # instance_map[cls] = cls(*args, **kwargs) # # log # instance = instance_map[cls] # print(f'id:{id(instance)}') # return instance # # # def singleton(cls): # def on_call(*args, **kwargs): # return get_instance(cls, *args, **kwargs) # return on_call def singleton(cls): instance = None def wrapper(*args, **kwargs): nonlocal instance if instance: return instance instance = cls(*args, **kwargs) print(f"id:{id(instance)}") return instance return wrapper class Singleton

23、Python之无参装饰器

左心房为你撑大大i 提交于 2020-03-24 08:53:10
目录 一、前置知识 1.1 *args, **kwargs 1.2 名称空间与作用域 1.3 函数对象 1.4 函数嵌套 1.5 闭包函数 二、什么是装饰器 三、为什么要用装饰器 四、装饰器的实现 4.1 无参装饰器的实现 4.2 语法糖 4.3 无参装饰器模板 一、前置知识 1.1 *args, **kwargs def index(x,y): print(x,y) def wrapper(*args,**kwargs): index(*args,**kwargs) # 本质上相当于给wrapper传入什么,给index就是调用什么 wrapper(y=222,x=111) # 111 222 1.2 名称空间与作用域 名称空间的的"嵌套"关系是在函数定义阶段,即检测语法的时候确定的 1.3 函数对象 # 1、可以把函数当做参数传入 # 2、可以把函数当做返回值返回 python中有while与for两种循环机制,其中while循环称之为条件循环,语法如下: 1.4 函数嵌套 函数的嵌套定义: def outter(func): def wrapper(): pass return wrapper 1.5 闭包函数 def outter(): x=111 def wrapper(): x return wrapper # 不给wrapper传参的情况下,让参数可以在外层函数