在CPython 2.7.10和3.4.3以及PyPy 2.6.0(Python 2.7.9)中,爲for循環中的名稱列表使用表達式(或其中的一些子集)顯然是合法的。下面是一個典型的循環:for循環名稱列表表達式是否合法?
>>> for a in [1]: pass
...
>>> a
1
但你也可以使用屬性的對象:
>>> class Obj(object): pass
...
>>> obj = Obj()
>>> for obj.b in [1]: pass
...
>>> obj.b
1
你甚至可以從表達式中使用屬性:
>>> for Obj().c in [1]: pass
...
但並不是所有的表達式似乎工作:
>>> for (True and obj.d) in [1]: pass
...
File "<stdin>", line 1
SyntaxError: can't assign to operator
但是隻要屬性在外面,他們就會這樣做?
>>> for (True and obj).e in [1]: pass
...
>>> obj.e
1
或者什麼是可分配的?
>>> for {}['f'] in [1]: pass
...
我很驚訝這些都是Python中的合法語法。我希望只有名字被允許。這些甚至應該工作嗎?這是一個疏忽嗎?這是Pyyy恰好也實現了CPython的實現細節嗎?
是((True and obj).e =「hello」'有效的語法? –
......回答我自己的問題:不,事實並非如此。 –
在dictionary.items()中爲'k,v做些什麼? –