失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python functools import wraps_python装饰器中functools.wraps的作用详解

python functools import wraps_python装饰器中functools.wraps的作用详解

时间:2019-02-10 12:40:43

相关推荐

python functools import wraps_python装饰器中functools.wraps的作用详解

#定义一个最简单的装饰器

def user_login_data(f):

def wrapper(*args, **kwargs):

return f(*args, **kwargs)

return wrapper

#用装饰器装饰以下两个函数

@user_login_data

def num1():

print("aaa")

@user_login_data

def num2():

print("bbbb")

if __name__ == '__main__':

print(num1.__name__)

print(num2.__name__)

以上代码的输出结果为:

wrapper

wrapper

由此函数使用装饰器时,函数的函数名即 __name__已经被装饰器改变.

一般定义装饰器的话可以不用考虑这点,但是如果多个函数被两个装饰器装饰时就报错,因为两个函数名一样,第二个函数再去装饰的话就报错.

解决方案就是引入 functools.wraps ,以上代码的解决如下:

def user_login_data(f):

@functools.wraps(f)

def wrapper(*args, **kwargs):

return f(*args, **kwargs)

return wrapper

增加@functools.wraps(f),可以保持当前装饰器去装饰的函数的 __name__ 的值不变

以上输出结果就是:

num1

num2

如果觉得《python functools import wraps_python装饰器中functools.wraps的作用详解》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。