函数装饰器主要作用是:不修改源函数的基础上,给原来函数增加功能。
比如:打印句子【我在优快云学Python’】,我想不修改这个函数前提下,增加一句话,我叫XXX名字。看代码
def name():
print('我在优快云学Python')
def funA(f):
print("我叫王小二")
f()
@funA
def name():
print('我在优快云学Python')
运行结果:
我叫王小二
我在优快云学Python
下面这个代码就是def name的装饰器,用来增加函数def name()的功能。
def funA(f):
print(“我叫王小二”)
f()
没修改def name()函数,却增加了一句话。
可以打印到一行,只需加end= " " 就可以了。
def funA(f):
print("我叫王小二",end=' ')
f()
@funA
def name():
print('我在优快云学Python')
运行结果:
我叫王小二 我在优快云学Python
去掉@funA这样↓
def funA(f):
print("我叫王小二",end=' ')
f()
def name():
print('我在优快云学Python')
name=funA(name)
运行结果:
我叫王小二 我在优快云学Python
f()参数解释,这f和name的内存地址相同。函数name实际已经是fucA的参数了。可以print(name),print(f)看看。
def funA(f):
print("我叫王小二",end=' ')
f()
print(f)
def name():
print('我第一次学Python')
print(name)
name=funA(name)
结果:
我叫王小二 我第一次学Python
<function name at 0x000002013DEBB550>
<function name at 0x000002013DEBB550>
学习装饰器要画内存图,这个更加直观快速的全面掌握运行原理。