概述
修饰符functools.wraps
其实整个functools模块都值得讲一下,我们后面会出一个专门的文章来讲。今天我们先来看下functools.wraps。
在本节内容开始前,首先要了解什么是修饰符?可以参考我们之前整理的一篇文章。Python修饰符详解,这这篇文章中我们可以看到,修饰器的一般形式是:
def works_for_all(func):
def inner(*args, **kwargs):
print("I can decorate any function")
return func(*args, **kwargs)
return inner
@works_for_all
def ff(*args, **kwargs):
print(args)
print(kwargs)
如果我们此时打印ff的名字:
print(ff.__name__)
>>> inner
可以看到,由于使用了修饰符,函数的__name__
属性已经被修改成了修饰器中闭包函数的名字。这样会导致什么问题呢?如果两个函数的修饰符都是works_for_all
,那么这两个函数的名字就一样了。
@works_for_all
def ff2(*args, **kwargs):
return 1
打印出两个函数的名字:
print(ff.__name__)
>>> inner
print(ff2.__name__)
>>> inner
如何解决这个问题呢?即便使用了修饰符,__name__
属性应该还是保持原来的函数名,此时functools.wraps
就派上用场了。
from functools import wraps
def works_for_all(func):
@wraps(func)
def inner(*args, **kwargs):
print("I can decorate any function")
return func(*args, **kwargs)
return inner
@works_for_all
def ff(*args, **kwargs):
print(args)
print(kwargs)
@works_for_all
def ff2(*args, **kwargs):
return 1
增加@functools.wraps(func)
, 可以保持当前装饰器去装饰的函数的 name 的值不变.
此时再打印两个函数的名字:
print(ff.__name__)
print(ff2.__name__)
>>> ff
>>> ff2
微信公众号:Quant_Times
最后
以上就是鲜艳早晨为你收集整理的Python高性能计算之修饰符wraps的全部内容,希望文章能够帮你解决Python高性能计算之修饰符wraps所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复