闭包函数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学习笔记 文章被收录于专栏

主旨是建立帮助自己理清python基础知识点的笔记

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务