基于闭包的装饰器
# 一、装饰器,在不改变原有代码的基础上增加新的功能
# 闭包三个条件 1、嵌套函数 2、内层函数调用外部函数的变量 3、外层函数返回内层函数名
# 这里将函数作为参数传递给另一个函数
def out_func(func):
def yanzheng():
# 这里是内层函数调用了外层函数的变量
func()
print('———正在验证———')
# 这里是外层函数返回了内层函数名
return yanzheng
# 装饰器,@函数名,不要加括号,语法糖
@out_func
def login():
print('———正在登陆———')
login()
# 二、有返回值的装饰器使用,要明白指针指向的内存地址变化
def person(func):
def head(*args, **kwargs):
func(*args, **kwargs)
print('这是我的脑袋')
return head
@person # 这里相当于foot = person(foot)
def foot(*args, **kwargs):
print(args)
print(kwargs)
print('这是我的脚')
foot(1, 2, 3, a=6, b=9)