【发布时间】:2015-05-18 11:49:45
【问题描述】:
我想以编程方式创建一个函数列表,每个函数返回一个带有特定键的字典,并且总是相同的值。那就是:
l1 = [lambda _: {0: 42}, lambda _: {2: 42}, lambda _: {3: 42}]
我正在尝试以编程方式实现相同的结果。 为了尝试避免延迟评估的常见问题,我认为我只需要创建一个生成器来动态生成函数:
gen = (lambda _: {f: 42} for f in range(3))
然后使用简单的列表推导得到列表:
l2 = [f for f in gen]
这还不够。事实上,如果你将func_clousures 相互比较,它们都是一样的:
x[0].func_closure == x[1].func_closure == x[2].func_closure # this is True
获得我想要的结果的最佳方法是什么?
【问题讨论】:
-
也许我理解错了,但
create a list of functions, each of which returns a dictionary with a specific key, and always the same value与字典列表有何不同? -
@SuperBiasedMan:这些值将在稍后评估。
-
@SuperBiasedMan 主要区别是我正在寻找函数列表(实际上是可调用对象),而字典列表是不可调用的。换句话说,我需要能够打电话给
l2[0]('something')。 -
众所周知的 Python 作用域问题。简答:
gen = (lambda _, f=f: {f: 42} for f in range(3)),这里长答stackoverflow.com/questions/12423614/…
标签: python lambda closures lazy-evaluation