列表list中都可以存放什么东东?

问题由此引出:

闭包

注意到返回的函数在其定义内部引用了局部变量args,所以,当一个函数返回了一个函数后,其内部的局部变量还被新函数引用,所以,闭包用起来简单,实现起来可不容易。
另一个需要注意的问题是,返回的函数并没有立刻执行,而是直到调用了f()才执行。我们来看一个例子:

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()结果应该是149,但实际结果是:

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

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

  • 返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
所以想到:“列表list中到底都可以放些什么东西?”
立马做个实验,图片放在下面:
列表list中都可以存放什么东东?_第1张图片
list中可以存放函数.JPG
至少是可以存放函数的!

你可能感兴趣的:(列表list中都可以存放什么东东?)