闭包
闭包的特征:
- 函数中嵌套一个函数
- 外层函数return返回内层函数
- 内层函数有引用外部作用域的非全局变量
def funcB1():
x=100
def funcB2():
c = x*2
print(c)
return funcB2
装饰器
通用装饰器
def decorator(func):
def wrapper(*args,**kwargs):
print("原函数执行前的扩展代码")
result = func(*args,**kwargs)
print("原函数执行后的扩展代码")
return result
return wrapper
@decorator
def work():
print("原功能函数的代码")
#
work()
---
原函数执行前的扩展代码
原功能函数的代码
原函数执行后的扩展代码
装饰器装饰类
def decorator(func):
def wrapper(*args,**kwargs):
print ("在此处可以在类创建对象之前按进行扩展代码")
# 实例化对象
result = func(*args,**kwargs)
print("在此处可以在类创建对象之后进行扩展代码")
return result # 返回对象
return wrapper
@decorator
class MyTest: # 实际原理 MyTest = decorator(MyTest)
print("这是一个类")
m = MyTest()
# output
这是一个类
在此处可以在类创建对象之前按进行扩展代码
在此处可以在类创建对象之后进行扩展代码
装饰器传参数
- 最外层参数:接收的是装饰器的 参数
- 第二层参数:接收的是被装饰的函数
- 第三层参数:接收的是被装饰函数的参数
# 装饰器传参数的流程
def demo1(name,age): # name age 为装饰器的参数
def decorator(func): # func:被装饰的函数
def wrapper(*args,**kwargs): # *args,**kwargs 被装饰器的函数调用传递的参数
# 在装饰器内部的嵌套函数中使用装饰器传递的参数
print('装饰器传递的参数')
result = func(*args,**kwargs)
return result
return wrapper
return decorator
@demo1('wang',18) # work = demo1('wang',18)(work)
def work():
print('---work---')
print(work())
# output
装饰器传递的参数
---work---
None