Python列表的奇怪行为

时间:2016-07-28 23:41:11

标签: python

Python 3附加功能对象列表时,订单是否可能会丢失?

我的理解是Python列表已经订购并且确实正在运行

numbers = []

for i in range(10):

    numbers.append(i)

print(numbers)

按预期返回[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

如果我追加功能对象,就像在这个MWE中那样:

functions = []

for k in range(10):

    def test():
        print('This is the %i th function.' %k)

    functions.append(test)

并致电functions[2]()我得到This is the 9 th function.

有人能理解这种奇怪的行为吗?

1 个答案:

答案 0 :(得分:2)

函数闭包在定义变量时不会捕获变量的值,它会捕获变量的名称。

因此,您在functions[2]中存储的函数引用k。当你调用它时,它会在调用它时显示k的值,而不是在它被定义时。