このコードで:
def problem():
PHI_LIST_0 = [lambda a, b: a+b+u for u in xrange(3)]
PHI_LIST_1 = [lambda a, b: a+b+0, lambda a, b: a+b+1, lambda a, b: a+b+2]
for phi in PHI_LIST_0: print "v0:", phi(1,1)
print
for phi in PHI_LIST_1: print "v1:", phi(1,1)
if __name__ == '__main__':
problem()
私は得る:
v0: 4
v0: 4
v0: 4
v1: 2
v1: 3
v1: 4
予想される動作は、PHI_LIST_1 の最後の動作です。結果が PHI_LIST_0 で異なる理由を理解していると思います。おそらく、Python は phi(1,1) が評価されるときに最後の「u」、つまり 2 を使用するためです。
しかし、リスト内包表記を使用して、PHI_LIST_0 が定義されている方法で関数のリストを宣言したいと思います。どうすればそれができるか知っている人はいますか?