闭包

一、c1,c2,c3=c赋值用法

c=[1,2,3,8]
c1,c2,c3=c

print(c1,c2,c3)

出错:

File "C:/Users/Administrator/Desktop/jiang/python/demo/MQ/test.py", line 2, in <module>
    c1,c2,c3=c
ValueError: too many values to unpack (expected 3)

2、

去掉列表中的一个元素

c=[1,2,3]
c1,c2,c3=c

print(c1,c2,c3)

执行成功

1
2
3

 

 

总结用法:

c必须是可迭代对象,例如列表,把它的元素一一对应赋值给对应的左边变量

 

二、

我们来看一个例子:

def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs

f1, f2, f3 = count()

 在上面的例子中,每次循环,都创建了一个新的函数,然后,把创建的3个函数都返回了。

你可能认为调用f1(),f2()和f3()结果应该是1,4,9,但实际结果是:

>>> f1()
9
>>> f2()
9
>>> f3()
9

全部都是9!原因就在于返回的函数引用了变量i,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i已经变成了3,因此最终结果为9。

 

 

 

posted @ 2018-04-29 14:03  Gringer  阅读(175)  评论(0编辑  收藏  举报