Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 11, 2017 10:25:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Генераторное выражение с lambda делает не то

FishHook
С этим сделать ничего нельзя, просто иметь в виду
Да не, надо просто привязать i к внутренней области видимости лямбда-функции, а не к области видимости включения. Через i=i .



Офлайн

#2 Дек. 11, 2017 10:27:14

Slow
Зарегистрирован: 2017-07-26
Сообщения: 88
Репутация: +  4  -
Профиль   Отправить e-mail  

Генераторное выражение с lambda делает не то

Rodegast
>Я то я этого не знаю.
Более чем уверен, что знаете

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

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

Нюанс тут в том, что поведение замыканий из вопроса ТС не имеет ни малейшего отношения к тому, определена переменная после выполнения компрехеншна или нет

Офлайн

#3 Дек. 11, 2017 12:00:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Генераторное выражение с lambda делает не то

Slow
То же самое и у топикстартера. Проблема вообще не в области видимости, а в том, как не надо делать замыкания в питоне.

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

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

И она имеет место быть



Офлайн

#4 Дек. 18, 2017 13:17:02

alien308
Зарегистрирован: 2012-06-23
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Генераторное выражение с lambda делает не то

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

В этой задаче перешёл на Python 3.4

Отредактировано alien308 (Дек. 18, 2017 13:18:17)

Офлайн

#5 Дек. 18, 2017 13:35:37

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2750
Репутация: +  184  -
Профиль   Отправить e-mail  

Генераторное выражение с lambda делает не то

Если значение 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]



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Дек. 18, 2017 13:45:28

alien308
Зарегистрирован: 2012-06-23
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Генераторное выражение с lambda делает не то

Нужен как раз массив функций, зависящих только от x. То есть получается всё таки замыкание. Вопрос в том не учидит ли предложенное решение чего нибудь совершенно внезапно, может безопасней вынести в модуль и импортировать из него, чтобы прибить гвоздями области видимости.

Офлайн

#7 Дек. 18, 2017 14:43:53

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2750
Репутация: +  184  -
Профиль   Отправить e-mail  

Генераторное выражение с lambda делает не то

Не бойся не учудит.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version