Допустимы ли выражения списка имен цикла for?

В 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. Я ожидал, что будут разрешены только имена. Они даже должны работать? Это недосмотр? Является ли это деталью реализации CPython, которую также реализует PyPy?

Ответы на вопрос(2)

Ваш ответ на вопрос