Sind for-loop-Namenslistenausdrücke zulässig?

n CPython 2.7.10 und 3.4.3 und PyPy 2.6.0 (Python 2.7.9) ist es anscheinend zulässig, Ausdrücke (oder eine Teilmenge davon) für die Namensliste in einer for-Schleife zu verwenden. Hier ist eine typische for-Schleife:

>>> for a in [1]: pass
...
>>> a
1

Aber Sie können auch Attribute von Objekten verwenden:

>>> class Obj(object): pass
...
>>> obj = Obj()
>>> for obj.b in [1]: pass
...
>>> obj.b
1

Und Sie können sogar Attribute aus Ausdrücken verwenden:

>>> for Obj().c in [1]: pass
...

Aber nicht alle Ausdrücke scheinen zu funktionieren:

>>> for (True and obj.d) in [1]: pass
...
  File "<stdin>", line 1
SyntaxError: can't assign to operator

Aber sie tun, solange das Attribut auf der Außenseite ist?

>>> for (True and obj).e in [1]: pass
...
>>> obj.e
1

Oder etwas ist zuweisbar?

>>> for {}['f'] in [1]: pass
...

Ich bin überrascht, dass alle diese Syntax in Python legal sind. Ich habe erwartet, dass nur Namen erlaubt sind. Sollen diese überhaupt funktionieren? Ist das ein Versehen? Ist dies ein Implementierungsdetail von CPython, das PyPy ebenfalls implementiert?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage