0
在此代碼中x = [x for x in range(3)]
全局x等於[0,1,2]。`x = [範圍(3)中的x的x值]`,`x [0]()`會返回什麼?
列表理解中的x是一個局部變量。我們定義x = [lambda: x for x in range(3)]
,x[0]()
會返回什麼? 0? 2?
不,它會返回一個列表,全局x本身。
我想知道爲什麼內部x是指全局x,但不是本地x?
在此代碼中x = [x for x in range(3)]
全局x等於[0,1,2]。`x = [範圍(3)中的x的x值]`,`x [0]()`會返回什麼?
列表理解中的x是一個局部變量。我們定義x = [lambda: x for x in range(3)]
,x[0]()
會返回什麼? 0? 2?
不,它會返回一個列表,全局x本身。
我想知道爲什麼內部x是指全局x,但不是本地x?
這是因爲運營商的優先。您的表達式爲:
x = [lambda: x for x in range(3)]
這相當於:
x = [(lambda: x) for x in range(3)]
這三大功能,每一個涉及到全局x的列表。 lambda創建一個作用域,在Python 2中,在本地作用域是全局作用域之後檢查下一個作用域,所以這就是找到x的地方。
這讓你想你想(我認爲這是你想要的):
>>> x = [(lambda x=x: x) for x in range(3)]
>>> x[0]()
0
這裏我們使用的事實,即默認值計算一次,在目前的範圍,定義函數時。這會將x的值烘焙到列表中的每個lambda中。
你知道在範圍(10)] [0]()中有什麼'[(lambda:i)'返回,爲什麼? – delnan
此問題已解決此問題:http://stackoverflow.com/questions/12381793/why-do-these-two-x-refer-to-different-variable – user805627