闭包
定义:
内外函数嵌套
内部函数引用外部函数作用域下的非全局变量
外函数返回内函数对象,这种内外函数嵌套的方式就是闭包
优点:为变量续命
缺点:浪费内存
- 接下来我们定义一个简单的闭包
# 外函数
def outer(num1, num2):
# 内函数
def inner():
# 内函数返回外函数作用域下的非全局变量
return num1 * num2
# 外函数返回内函数对象
return inner
# 调用
# outer(1, 5)()
# 我们可以在这打印一下
print(outer(1, 5)())
装饰器
定义:
Python装饰器就是用于拓展原来函数功能的一种函数,利用了闭包的思路,
目的是在不改变原函数名(或类名)的情况下,给函数增加 新的功能。
这个函数的特殊之处在于它的返回值也是一个函数,是内部闭函数
- 接下来我们定义一个简单的多层装饰器语法
def outer1(func):
# func是被装饰的函数
def inner(*args, **kwargs):
# *args, **kwargs 接收任意参数
print("装饰器1代码1")
return func(*args, **kwargs)
print("装饰器1代码2")
return inner
def outer2(func):
def inner(*args, **kwargs):
print('装饰器2代码1')
return func(*args, **kwargs)
print('装饰器2代码2')
return inner
# 通过@装饰器名 使用
@outer1
@outer2
def func():
print('函数执行')
# 调用装饰的函数
func()
# 执行的顺序
"""
装饰器1代码1
装饰器2代码1
函数执行
装饰器2代码2
装饰器1代码2
"""