Не подскажите (или дайте сылку) почему в list comprehensions не льзя использовать оператор присваивания?
In [1]: li = [1,'sd', [], {}] In [2]: [ type(x) for x in li] Out[2]: [int, str, list, dict] In [3]: [x.append('3') for x in li if isinstance(x, list) ] Out[3]: [None] In [4]: li Out[4]: [1, 'sd', ['3'], {}] In [5]: x Out[5]: {}
То есть из писка видно li, и более того из области видимости где был объявлен генератор списка в доступна имя x присвоенное for.
In [6]: x = 89 In [7]: [x.append('3') for x in li if isinstance(x, list) ] Out[7]: [None] In [8]: x Out[8]: {}
Глава 6. Функции и функциональное программирование
"Наконец, важно отметить, что в Python 2 переменные циклов, определяе-
мые внутри генератора списков, размещаются в текущей области видимо-
сти и остаются доступными по завершении работы генератора списка. На-
пример, переменная цикла x, используемая в генераторе списков [x for x in
a], получит значение, которое затрет значение, хранившееся в ней ранее,
и по завершении работы генератора оно будет равно значению последнего
элемента полученного списка. К счастью, эта проблема была решена в Py-
thon 3, где переменная цикла остается частной.
Однако.
In [9]: a = 0 In [10]: [a += 1 for x in li if isinstance(x, list) ] File "<ipython-input-10-0e620fdd4eff>", line 1 [a += 1 for x in li if isinstance(x, list) ] ^ SyntaxError: invalid syntax In [11]: [a = 1 for x in li if isinstance(x, list) ] File "<ipython-input-11-83001fa94297>", line 1 [a = 1 for x in li if isinstance(x, list) ] ^ SyntaxError: invalid syntax
Почему нельзя использовать ‘=’