Python的装饰器的作用

编程入门 行业动态 更新时间:2024-10-09 22:18:18

Python的装饰器的<a href=https://www.elefans.com/category/jswz/34/1768738.html style=作用"/>

Python的装饰器的作用

装饰器模式是一个强大的模式,可以给一个函数增加额外的方法而不用修改原来的代码。比如,当我们需要给原来的代码添加日志记录时,需要将原来的代码进行修改,在函数里面增加日志记录的代码。但如果使用装饰器模式,使用装饰器装饰原来的代码,将日志记录放在装饰器里,就可以避免修改原有的代码,同时又实现了所需的功能。这种编程模式就叫做面向切片编程。
作用和使用场景:

  • 引入日志
  • 函数执行时间统计
  • 执行函数前预备处理
  • 执行函数前的清理功能
  • 权限效验等

1、日志记录实例:

def	func():print("func")

现在让我们记录一下这个函数执行时的日志记录,即记录一下函数执行的时间,输出执行时间和方法名。日志输出函数如下

from	datetime	import	datetime  as dt
def log(func):print('+str(dt.now()+)'+funnc.__name__)func()
但我们想使用func函数的时候,log(func)
会输出:[2017-09-10 20:51:09.970854]func

这就实现了调用 func 时,同时进行日志记录。但这样做很明显会有问题,就是我们需要把所有调用 func 的地方改为 log(func) ,这很麻烦,并且会需要改很多代码。所以,我们换一种写法:

def log(log):def wrapper():print('['+str(dt.noe())']'+func.__name__)func()return wrapper#请注意,这就是一个装饰器了!

里面那个 wrapper 的意思就是装饰、包裹的意思。我们将 func 函数装饰一下变成了一个新的函数然后返回它。那该如何使用呢?如下:

func = log(func)
func()
#使用方法就是用log装饰器将func装饰一下后返回覆盖掉原有的func即可。

所谓的语法糖的意思就是添加一个语法,让代码更简单的意思。Python为装饰器也提供了一个语法糖,就是 @ 符号。我们可以使用这个符号声明这是一个装饰器。如下,我们使用语法糖的写法给 func 添加 log 这个装饰器:

@log
def func():return print('func')
这样写好后,直接调用 func() 即可同时输出日志了:
[2017-09-10 21:10:50.933021]funcfunc

2、装饰器给函数传参

def func(msg):print("-->>"+msg)
def log(func):def  wrapper(msg):print('['+str(dt.now())+']'+func.__name__) return func(msg) return wrapper
这样一改, log 就又可以用了,给 func 再加上语法糖:
@log
def func(msg):print("-->>"+msg)func('hello')

下面我们就写一个更强力的 log 装饰器,来让装饰器可以装饰任何函数,而不用管那个函数又多少个参数。使用Python的可变参数 *args 和关键字参数 **kwargs 即可。修改 log,如下:

def log(func):def wrapper(*args,**kwargs):print('['+str(dt.now())+']'+func.__name__) 					     					return func(*args, **kwargs)return wrapper

装饰器本身也可以带参数,比如说,我们给 log装饰器添加一个参数 is_show 用于是否显示日志输出。如下:

def log(is_show=True):def wrapper(func):def inner_wrapper(*args, **kwargs):if is_show:print('['+str(dt.now())+']'+func.__name__) 		    	 return func(*args, **kwargs)return inner_wrapper return wrapper
# 默认显示日志@log(True)def func1():print("func1")# 默认不显示日志@log(False)def func2(): print("func2")

大数据的文件读取:

  1. 利用生成器generator
  2. 迭代器进行迭代遍历:
  3. for line in file:
  4. grep命令是一种强大的文本搜索工具

如何提高Python的运行效率:

  1. 使用生成器
  2. 关键代码使用外部功能包
  3. 针对循环的优化,尽量避免在循环中访问变量的属性。

更多推荐

Python的装饰器的作用

本文发布于:2024-02-07 02:11:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1752680.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:作用   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!