-1

可能重复:
在循环中创建 lambda

在下面的代码中,调用返回的闭包数组的任何成员都会打印数字 4。

def go():
    x = []
    for i in range(5):
        def y(): print i
        x.append(y)

    return x

我希望闭包的每个成员都打印i定义闭包时的数字。

4

1 回答 1

4

解决此问题的一种方法是使用默认参数:

def y(i=i): 
    print i

默认参数是在创建函数时评估的,而不是调用函数,所以这正如你所期望的那样工作。

>>> i = 1
>>> def y(i=i): print i
... 
>>> i = 2
>>> y()
1

一些额外的信息只是为了好玩:

如果您好奇默认值是什么,您可以随时使用.func_defaults属性(__defaults__在 python3.x 中)检查它:

>>> y.func_defaults
(1,)

该属性也是可写的,因此您实际上可以在创建函数后通过在其中放置一个新元组来更改默认值。

于 2012-12-19T16:40:23.107 回答