CPython 2.7.10と3.4.3とPyPy 2.6.0(Python 2.7.9)では、forループの名前リストに式(またはそれらのサブセット)を使用することは明らかです。ここではforループの典型的です:for-loopの名前リスト式は合法ですか?
>>> 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の正当な構文であることに驚いています。私は名前だけが許されると思った。これらも機能するはずですか?これは見落としですか?これは、PyPyが実装しているCPythonの実装の詳細ですか?
'(Trueおよびobj).e =" hello "'有効な構文ですか? –
...自分の質問に答える:いいえ、そうではありません。 –
'for k、v dictionary.items()'はどうですか? –