# 闭包本质是一个函数,如意一个内部函数引用了外部作用域中的变量,那么这个函数就被认为是闭包。
# 闭包的作用:使局部变量被外在函数外被访问成为了可能
# 这里我在函数外想访问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? 先回答第一个被初学编程的朋友问到最多的问题,为什么...