Size: a a a

2017 September 07

IT

Ivan Tsyganov in Moscow Python
если я правильно помню - без разницы по чему ты будешь итерироваться внутри comprehension.
Длина итогового листа будет известна только после того, как интерпретатор получит StopIteration от итерируемого объекта
источник

СК

Сергей Козλов ⚡️🧙🏻‍♂️ in Moscow Python
Ок спасибо 😊 Ну я так просто спросил 😊
источник

GB

Grigory Bakunov in Moscow Python
Да какая разница то? Результатом же будет лист
источник

GB

Grigory Bakunov in Moscow Python
У него время на вставку в конец фиксированное
источник

AS

Alexey Starkov in Moscow Python
Alexey Starkov
мне показалось необычным что
>>> var = 1
>>> locals()['var']
1
>>> for i in range(1):
...     print(locals()['var'])
...
1
>>> [locals()['var'] for _ in range(1)]
Traceback (most recent call last):
 File "<input>", line 1, in <module>
   [locals()['var'] for _ in range(1)]
 File "<input>", line 1, in <listcomp>
   [locals()['var'] for _ in range(1)]
KeyError: 'var'
>>>

я полез читать доки и не нашел упоминаний про то что comprehension заводит свой scope, вот и спросил :)
а, еще в python2 мы получим
>>> var=1
>>> print [locals()['var'] for _ in range(1)]
[1]
источник

СК

Сергей Козλов ⚡️🧙🏻‍♂️ in Moscow Python
просто любопытно
источник

СК

Сергей Козλов ⚡️🧙🏻‍♂️ in Moscow Python
ааа блин
источник

AS

Alexey Starkov in Moscow Python
вот чего нарыл
https://docs.python.org/3/reference/executionmodel.html#naming-and-binding
The scope of names defined in a class block is limited to the class block; it does not extend to the code blocks of methods – this includes comprehensions and generator expressions since they are implemented using a function scope.
видимо это деталь реализации, просочившаяся отсюда
источник

AS

Alexey Starkov in Moscow Python
ср. py2, нету comprehensions
The scope of names defined in a class block is limited to the class block; it does not extend to the code blocks of methods – this includes generator expressions since they are implemented using a function scope.
источник

AS

Alexey Starkov in Moscow Python
ну и подтвержение в py2.7
>>> print(list(locals()['var'] for _ in range(1)))
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 1, in <genexpr>
KeyError: 'var'
>>>
источник

СК

Сергей Козλов ⚡️🧙🏻‍♂️ in Moscow Python
но вроде бы список в питоне работает следующим образом.

Заранее создается массив указателей определенной длины

пока массив не заполнен значениями вставка происходит за O(1), но когда массив заполняется происходит resize этого массива. верно?
источник

СК

Сергей Козλов ⚡️🧙🏻‍♂️ in Moscow Python
то есть по сути будет o(n)
источник

СК

Сергей Козλов ⚡️🧙🏻‍♂️ in Moscow Python
ну вот по этому я и спросил про list comprehension

допустим я знаю длину будущего списка и могу создать сразу список нужной длины и вставлять значения по индексам.
источник

L

LighteR in Moscow Python
источник

СК

Сергей Козλов ⚡️🧙🏻‍♂️ in Moscow Python
ну это я утром в метро задумался об этом. хз зачем
источник

СК

Сергей Козλов ⚡️🧙🏻‍♂️ in Moscow Python
да я знаю это таблицу, спасибо большое LighteR
источник

AS

Alexey Starkov in Moscow Python
а, он использует непрерывный массив, так что я наврал, да, сорян :)
источник
2017 October 13

AS

Alexey Starkov in Moscow Python
Уважаемые питонисты, а у меня вопрос по SQLAlchemy:
Вот есть у нас TypeDecorator, мы им задекорировали тип колонки. А для определенного запроса мы хотим его не применять, можно его динамически отключить?
источник

AK

Alex Khaerov in Moscow Python
попробовать его параметризовать (декоратор) и релизовать логику декорируемой функции при параметре
источник

AS

Alexey Starkov in Moscow Python
можно, но не слишком глобально получится? а если два потока будет? в одном параметр включится и повлияет на другой, даже если его в context manager завернуть
источник