闭包函数2
如下代码段中,如果注释掉nonlocal count声明代码行,为什么会报错?
答案是: 在闭包函数中,可以正常访问外部变量count,不能修改,如果想修改这个变量count,必须在内部函数中声明count不是作用于内部函数的局部变量,而是来自外部作用域。
********************************************************************
def outer_func(start):
count = start # count是outer_func的局部变量
def inner_func():
nonlocal count # 声明count不是inner_func的局部变量,而是来自外部作用域
count += 1
return count
# 返回内部函数本身,而不是调用它
return inner_func
# 创建一个闭包实例
counter = outer_func(5) # 此时outer_func已执行完毕,其局部变量count理应被销毁...
# 但闭包“记住”了count
print(counter()) # 输出: 6
print(counter()) # 输出: 7
print(counter()) # 输出: 8
*****************************************************************************
但是如果将代码进行修改如下:
引入局部变量x并赋值,然后在闭包函数内部计算count=x+1,此时的输出结果是2 2 2,由此可见,此时闭包函数中的count只是一个局部变量,和外部函数中的count不是同一个变量。
******************************************************************
def outer_func(start):
count = start # count是outer_func的局部变量
def inner_func():
#nonlocal count # 声明count不是inner_func的局部变量,而是来自外部作用域
x=1
count=x+1
return count
# 返回内部函数本身,而不是调用它
return inner_func
# 创建一个闭包实例
counter = outer_func(5) # 此时outer_func已执行完毕,其局部变量count理应被销毁...
# 但闭包“记住”了count
print(counter()) # 输出: 2
print(counter()) # 输出: 2
print(counter()) # 输出: 2
*********************************************************
主旨是建立帮助自己理清python基础知识点的笔记



查看5道真题和解析