python 装饰器
装饰器是一个函数,主要作用是用来包装另一个函数或类(后面才讲) 装饰的目的是在不改变原函数名(或类名) 的情况下,改变被包装对象的行为
装饰器的功能就相当于是一个闭包
函数装饰器
【1】函数装饰器指装饰器传入的是一个函数,返回的也是一个函数。
【2】一个函数可以有多个装饰器函数。
def 装饰器函数名(参数):
pass
return 函数对象
@装饰器函数名
def 函数名(形参列表):
pass
@ 装饰器函数名
def myfun(a, b):
pass
等同于:
def myfun(a, b):
pass
myfun = 装饰器函数名(myfun)
应用场景:
【1】ATM机输入密码,进行权限验证
输入密码是装饰器函数。输入正确(验证通过)才会让你进行下一步操作,取钱或存钱
In [17]: def privileged_check(fn): ...: def fx(name, x): ...: print("正在检查权限验证") ...: print("请输入密码:") ...: print("密码正确,验证通过") ...: fn(name, x) ...: return fx ...: ...: ...: # 存钱 ...: @privileged_check ...: def save_money(name, x): # 存钱 ...: print(name, '存钱:', x, '元') ...: ...: # 取钱 ...: @privileged_check ...: def withdraw(name, x): ...: print(name, '取钱:', x, '元') ...: ...: ...: # ---调用 ...: save_money('小张', 200) ...: save_money('小赵', 500) ...: withdraw('小杨', 300) 正在检查权限验证 请输入密码: 密码正确,验证通过 小张 存钱: 200 元 正在检查权限验证 请输入密码: 密码正确,验证通过 小赵 存钱: 500 元 正在检查权限验证 请输入密码: 密码正确,验证通过 小杨 取钱: 300 元