一、目标
学习Python的装饰器的用法,正式写法
二、试验平台
windows7 , python3.7
三、先看个例子
解析:比如原本有个方法xFunc,让输入年龄,打印年龄,但有个问题,年龄不可能为负数,怎么办?现在就要在不修改原有方法的情况下,去改变原来方法的输出结果(输入负数,结果都是0)
def xFunc(age):
print(f'你输入的年龄是:{age}')
def zhuangshiqi(xArgs):
def zsqInner(age):
if age < 0:
age = 0
xFunc(age)
return zsqInner
kahn = zhuangshiqi(xFunc)
kahn(-5)
kahn(18)
'''
输出结果:
你输入的年龄是:0
你输入的年龄是:18
'''
四、正式版装饰器的写法举例
def zhuangshiqi(xArgs):
def zsqInner(age):
if age < 0:
age = 0
xArgs(age)
return zsqInner
@zhuangshiqi
def xFunc(age):
print(f'你输入的年龄是:{age}')
xFunc(-10)
xFunc(-2)
xFunc(18)
'''
你输入的年龄是:0
你输入的年龄是:0
你输入的年龄是:18
'''
五、多参数正式版装饰器写法举例:
def zhuangshiqi(xCanShu):
def zsq(*args, **kwargs):
print("装饰器打印的东西-----(说明被装饰了)")
xCanShu(*args, **kwargs)
return zsq
@zhuangshiqi
def say(name, age):
print(f"我的名字是{name},我今年{age}岁了")
@zhuangshiqi
def sayHello(name):
print(f"The world i am coming. By {name}")
say("kahn", 18) # #执行被装饰后的方法say
sayHello("KAHN") # #执行被装饰后的方法sayHello方法
'''
执行结果:
装饰器打印的东西-----(说明被装饰了)
我的名字是kahn,我今年18岁了
装饰器打印的东西-----(说明被装饰了)
The world i am coming. By KAHN
'''
kahn ok 2019年4月22日14:25:20