【发布时间】:2012-12-07 01:48:24
【问题描述】:
在下面的代码中,调用返回的闭包数组的任何成员 打印数字 4。
def go():
x = []
for i in range(5):
def y(): print i
x.append(y)
return x
我希望闭包的每个成员都打印出 i 在定义闭包时的编号。
【问题讨论】:
在下面的代码中,调用返回的闭包数组的任何成员 打印数字 4。
def go():
x = []
for i in range(5):
def y(): print i
x.append(y)
return x
我希望闭包的每个成员都打印出 i 在定义闭包时的编号。
【问题讨论】:
解决此问题的一种方法是使用默认参数:
def y(i=i):
print i
默认参数是在创建函数时评估的,而不是调用函数,所以这可以按您的预期工作。
>>> i = 1
>>> def y(i=i): print i
...
>>> i = 2
>>> y()
1
一些额外的信息只是为了好玩:
如果您对默认值感到好奇,您可以随时使用.func_defaults 属性(python3.x 中的__defaults__)检查:
>>> y.func_defaults
(1,)
这个属性也是可写的,所以实际上你可以在创建函数后通过在其中放置一个新元组来更改默认值。
【讨论】: