多层装饰器
"""
多层装饰器器:谁离函数近 先装饰谁
"""
#定义装饰器
def zhuang1(func):
print("我是装饰器1")
def inner():
print("刷漆")
func()
return inner
def zhaung2(func):
print("我是装饰器2")
def inner():
print("铺地板")
func()
return inner
#定义一个被装饰的函数
@zhaung2
@zhuang1
def house():
print("毛坯房")
house()
None
万能装饰器
# 万能装饰器 当 被装饰的函数,参数为多值参数的时候,可以使用这种形式
# 万能装饰器 也可以用来装饰普通的函数
# 定义装饰器
def set_func(func):
def call_fun(*args, **kwargs):
print("添加额外功能")
return func(*args, **kwargs)
# 返回原先函数的返回值
return call_fun
#被装饰的函数
@set_func
def test(*args, **kwargs):
print(args) # 元组 (1, 2, 3, 4, 5, "a", "b", "c",)
print(kwargs) # 字典 {"num":2}
print("tdsjasjflasj")
var = test(1, 2, 3, 4, 5, "a", "b", "c", num=2)
print(var)
普通装饰器
def set_func(func):
def call_fun(*args, **kwargs):
print("添加额外功能")
return func(*args, **kwargs)
# 返回原先函数的返回值
return call_fun
@set_func # 糖衣
def man():
print("好好上班!")
man()
匿名函数: 简化函数定义
不再使用def来定义函数 而是使用lambda
格式:lambda 参数1参数2...:运算
def func_name():
pass
#可以使用匿名函数的方式来定义函数