前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 闭包中引用的变量值变更问题

python 闭包中引用的变量值变更问题

作者头像
py3study
发布2020-01-09 16:10:12
1K0
发布2020-01-09 16:10:12
举报
文章被收录于专栏:python3python3

python的闭包当内层函数引用外层函数的局部变量时,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变

如下:

代码语言:javascript
复制
def count():
    fs = []
    for i in range(1, 4):
        def lazy_count(j):
            def cou():
                return j*j
            return cou
        r = lazy_count(i)
        fs.append(r)
    return fs

f1, f2, f3 = count()
print f1(), f2(), f3()

如果以上代码写成如下:

代码语言:javascript
复制
def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs

f1, f2, f3 = count()

最终得到的f1, f2, f3就都是9,是因为这行:

代码语言:javascript
复制
f1, f2, f3 = count()

里得到的count()函数中的f()函数中的i已经迭代至3了,最终得出的结果只能是9 9 9

而刚开始给出的代码中f1,f2,f3其实得到的是一个序列而已,而计算这个序列中每个元素时引用的闭包中的外层函数中的变量随着迭代变更,从1至3,并且同时计算出该次迭代所得的元素值append进序列返回,顾最终结果为1 4 9

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档