Форум сайта python.su
FishHookДа не, надо просто привязать i к внутренней области видимости лямбда-функции, а не к области видимости включения. Через i=i .
С этим сделать ничего нельзя, просто иметь в виду
Офлайн
RodegastБолее чем уверен, что знаете
>Я то я этого не знаю.
Rodegast
>Это иллюстрация того что “от версии питона это не зависит”.
Офлайн
Slow
То же самое и у топикстартера. Проблема вообще не в области видимости, а в том, как не надо делать замыкания в питоне.
При внимательном рассмотрение оказывается что при выполнении генераторного выражения в области видимости появляется переменная i значением 5
Офлайн
Скажите как правильно сделать всё таки? Замыкание как раз и не нужно, нужна буквальная интерпретация. Форсировать lambda? Как это делается?
В этой задаче перешёл на Python 3.4
Отредактировано alien308 (Дек. 18, 2017 13:18:17)
Офлайн
Если значение 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]
Офлайн
Нужен как раз массив функций, зависящих только от x. То есть получается всё таки замыкание. Вопрос в том не учидит ли предложенное решение чего нибудь совершенно внезапно, может безопасней вынести в модуль и импортировать из него, чтобы прибить гвоздями области видимости.
Офлайн
Не бойся не учудит.
Офлайн