1.闭包
- 闭包的三个条件:
1.外部函数包裹内部函数
2.内部引用外部的变量
3.返回内部函数的地址
def f1(a):
def f2(b):
return a**b
return f2
print(f1(2)) # f2
print(f1(2)(3)) # f2返回值
- 内部函数要想使用全局变量,用nonlocal
def outter():
a = 6
print("调用outter...")
def inner():
nonlocal a
a += 6
print("调用inner...")
return a
return inner
2.装饰器
-
装饰器:拓展已有函数的功能的一种函数。
由闭包和语法糖组成 -
内置装饰器:@classmethod @staticmethod @property
-
已有函数:
def get_info():
print("~展示商品信息~")
- 添加验证用户名的函数:
def check_user_name(func):
def check():
user_name = input("请输入用户名:")
if user_name == "wsm":
func()
else:
print("用户名输入错误!")
return check
- 将验证用户名的函数用装饰器的方式添加到已有函数:
@check_user_name
def get_info():
print("~展示商品信息~")