使用 lambda 函数作为字典值时出现奇怪的覆盖问题
我正在尝试创建一个字典,里面包含几个 lambda 函数。这些 lambda 函数是用来计算 numpy 的百分位数的。但是我得到的结果很奇怪,感觉所有的 lambda 函数都好像变成了 np.percentile(x, q=100)。
import numpy as np
d = {}
inc = 10
for i in range(0,101,inc):
d[str(i)+'_perc'] = lambda x: np.percentile(x,q=i)
a = [1,2,3,4,5]
print(d)
print(d['10_perc'](a))
print(d['50_perc'](a))
print(d['90_perc'](a))
打印出来的结果是:
{'50_perc': <function <lambda> at 0x2cb7b90>, '70_perc': <function <lambda> at 0x2cb77d0>, '40_perc': <function <lambda> at 0x2cb75f0>, '10_perc': <function <lambda> at 0x2cb7cf8>, '30_perc': <function <lambda> at 0x2cb7500>, '0_perc': <function <lambda> at 0x2cb7aa0>, '80_perc': <function <lambda> at 0x2cb78c0>, '20_perc': <function <lambda> at 0x2cb7a28>, '100_perc': <function <lambda> at 0x2cb7848>, '90_perc': <function <lambda> at 0x2cb7758>, '60_perc': <function <lambda> at 0x2cb7d70>}
5
5
5
就好像所有的 lambda 函数都被后面的函数覆盖了一样……
1 个回答
3
找到了解决办法:
有些关于晚绑定的东西,我不是很明白。不过无论如何,
def returnLambda(i):
return lambda x: np.percentile(x,i)
for i in xrange(0,101,10):
d[str(i)+'_perc'] = returnLambda(i)
print(i)