装饰器的副作用
def fn():
'''this is fn'''
help(fn)
#结果:
Help on function fn in module __main__:
fn()
this is fn
这就是一个函数的文档。
这里help函数好像其实就是调用了函数下面的注释。
其实和默认值一样,文档是存在__doc__
里面的,如下:
print(fn.__doc__)
# 结果
this is fn
我们可以通过dir(fn)
来获取它的所有属性。
import datetime
def logger(fn):
def warp(*args, **kwargs):
start = datetime.datetime.now()
ret = fn(*args, **kwargs)
end = datetime.datetime.now()
print('{} called took {}'.format(fn.__name__, end - start))
return ret
return warp
import time
@logger
def sleep(x):
time.sleep(x)
>>> sleep.__name__
'warp'
如上的装饰器,这里可以发现调用__name__
属性后出来的是wrap而不是sleep,这就是用了装饰器后的副作用。
当然,我们可以通过赋值的方式来