闭包:
在一个函数里嵌套一个函数,外部函数返回内部函数,内部函数可以调用外部函数的变量和参数
# 定义外部函数
def fun1():
# 定义变量
num1 = 1
# 定义内部函数
def fun2(num2):
# 使用外部函数
num3 = num1 + num2
print(num3)
# 外部函数返回内部函数
return fun2
# 获取闭包
new = fun1()
# 执行
nwe(3)
# 此时输出 4 外部函数num1=1 输入的内部函数num2=3 所以结果为4
作用:
保存外部函数的变量,不会随着外部函数调用完而销毁
装饰器:
本质上就是一个闭包,也就是函数嵌套
improt time
def decorator(func)
def built_in_function()
print("函数运行了")
func()
print("函数结束了")
return built_in_function
@decorator
def fun()
for i in range(1, 10)
print(i)
# 调用函数
fun()
# 运行结果
函数运行了
1
2
3
4
5
6
7
8
9
函数结束了
作用:
在不改变源代码、函数的调用方式的前提下给函数添加新的功能
闭包与装饰器的区别:
装饰器本质上就是一个闭包,但是装饰器有且只有一个参数并且是函数类型