Допустимы ли выражения списка имен цикла 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?