Найти - Пользователи
Полная версия: Генераторное выражение с lambda делает не то
Начало » Python для экспертов » Генераторное выражение с lambda делает не то
1 2
py.user.next
FishHook
С этим сделать ничего нельзя, просто иметь в виду
Да не, надо просто привязать i к внутренней области видимости лямбда-функции, а не к области видимости включения. Через i=i .
Slow
Rodegast
>Я то я этого не знаю.
Более чем уверен, что знаете

Rodegast
>Это иллюстрация того что “от версии питона это не зависит”.

От версии питона зависит, будет ли видна переменная, о чем как раз говорил фишхук
А вот замыкания ведут себя одинаково лениво, привет Гвидо, тут вы полностью правы.

Нюанс тут в том, что поведение замыканий из вопроса ТС не имеет ни малейшего отношения к тому, определена переменная после выполнения компрехеншна или нет
FishHook
Slow
То же самое и у топикстартера. Проблема вообще не в области видимости, а в том, как не надо делать замыкания в питоне.

ТС именно так описывает проблему

При внимательном рассмотрение оказывается что при выполнении генераторного выражения в области видимости появляется переменная i значением 5

И она имеет место быть
alien308
Скажите как правильно сделать всё таки? Замыкание как раз и не нужно, нужна буквальная интерпретация. Форсировать lambda? Как это делается?

В этой задаче перешёл на Python 3.4
Rodegast
Если значение x заранее известно, то не нужно использовать lambda.
 >>> from scipy.special import eval_legendre
>>> M0 = 6
>>> x = 0.5
>>> [ eval_legendre(i, x) for i in range(M0) ]
[1.0, 0.5, -0.125, -0.43749999999999994, -0.28906249999999994, 0.089843750000000056]
alien308
Нужен как раз массив функций, зависящих только от x. То есть получается всё таки замыкание. Вопрос в том не учидит ли предложенное решение чего нибудь совершенно внезапно, может безопасней вынести в модуль и импортировать из него, чтобы прибить гвоздями области видимости.
Rodegast
Не бойся не учудит.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB