码迷,mamicode.com
首页 > 其他好文 > 详细

闭包引起值变化(转)

时间:2017-09-03 22:19:02      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:return   代码   元素   syn   order   变量   pst   ref   pac   

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

如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
def count():
    fs = []
    for in range(14):
        def lazy_count(j):
            def cou():
                return j*j
            return cou
        = lazy_count(i)
        fs.append(r)
    return fs
 
f1, f2, f3 = count()
print f1(), f2(), f3()

如果以上代码写成如下:

1
2
3
4
5
6
7
8
9
def count():
    fs = []
    for in range(14):
        def f():
             return i*i
        fs.append(f)
    return fs
 
f1, f2, f3 = count()

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

1
f1, f2, f3 = count()

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

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

本文出自 “keep_study_zh” 博客,请务必保留此出处http://zhkpsty.blog.51cto.com/9013616/1695120

闭包引起值变化(转)

标签:return   代码   元素   syn   order   变量   pst   ref   pac   

原文地址:http://www.cnblogs.com/shixisheng/p/7471060.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!