# 闭包本质是一个函数,如意一个内部函数引用了外部作用域中的变量,那么这个函数就被认为是闭包。
# 闭包的作用:使局部变量被外在函数外被访问成为了可能
# 这里我在函数外想访问in_func会报错
def func():
in_func = 'In Func'
print(in_func)
# print(in_func)
# 那通常我们是定义全部变量
# 函数可以引用外部的全局变量
out_func = 'Out Func'
def func():
print(out_func)
func()
# 闭包的话就是不用使用全局变量,外部也能访问到。
def closure_func(): # closure_func函数返回f函数
in_func = 'In Func'
# f函数返回in_fuc变量
def f():
return in_func
return f
# 跟上面是对应的,closure_func返回的是一个方法,方法里使我们想要的局部变量
# <function closure_func.<locals>.f at 0x0000027F84C6BBF8>
print(closure_func())
# 获得局部变量
print(closure_func().__closure__[0].cell_contents)
# In Func
print(closure_func()())
# 写一个带有参数的函数
def add_number(x):
def number(y):
return x + y
return number
add_number5 = add_number(5)
# number:15
print(f'number{add_number5(10)}')
# number:105
print(f'number:{add_number5(100)}')
# 注意的地方:
# 修改外部作用域中的局部变量,使用nonlocal 关键字
def f():
m = 1
def g():
# 指明为上一个作用域中的变量
nonlocal m
m = 10
return m
return g
print(f()())
first = []
# 输出:4,4,4
# 原因:循环执行完后,i变成2后才赋值给函数
for i in range(3):
def loop():
return i * 2
first.append(loop)
for f in first:
print(f())
first = []
# 0,2,4
# 循环向内部函数传入参数
def loop():
def f(x):
return x * 2
for x in range(3):
first.append(f(x))
return first
print(loop())
python闭包学习
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 为什么要学习Python编程语言?哪些人适合学习Python? 先回答第一个被初学编程的朋友问到最多的问题,为什么...