Создайте лямбда-функцию в l oop, которая игнорирует свой аргумент и возвращает переменную l oop - PullRequest
0 голосов
/ 07 августа 2020

Я создаю лямбды в al oop. Я хочу, чтобы лямбда игнорировала свой аргумент и возвращала одну из переменных l oop. Это отличается от других подобных вопросов.

Проблема в том, что все лямбда-выражения, созданные здесь, возвращают одно и то же значение, поскольку они ссылаются на переменную l oop. Я пробовал различные формы copy() и deepcopy(), et c., И я прочитал эту ссылку (https://docs.python.org/3/faq/programming.html#why -do-lambdas-defined-in-al oop -with -different-values-all-return-the-same-result ), но решения пока нет.

Как мне создать лямбду, которая игнорирует свой аргумент и действительно фиксирует значение переменной?

# Go through defaults and fill in default fn if none exists for a given key
for k,v in defaults.items():
    if not convfns.get(k):
        convfns[k] = lambda _: v

Изменить: чтобы уточнить, все предыдущие ответы, которые я видел, либо включают дополнительную лямбду, либо не принимают аргумент и просто захватывают переменную l oop со значением по умолчанию. Мне нужно было взять аргумент, проигнорировать его и вернуть захваченную переменную l oop.

1 Ответ

0 голосов
/ 07 августа 2020

Заставьте лямбду принимать 2 аргумента и установите второй равным желаемой переменной l oop. Вызывающая функция просто передает первый аргумент, который игнорируется.

# Go through defaults and fill in default fn if none exists for a given key
for k,v in defaults.items():
    if not convfns.get(k):
        convfns[k] = lambda _,z=v: z
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...