Python笔记之装饰器(复杂版正式版)

一、目标

学习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

猜你喜欢

转载自blog.csdn.net/xoofly/article/details/89442037
今日推荐