Понимание словаря со встроенными функциями

Мне нужно хранить функции в словаре, каждая функция зависит от ее ключа, скажем, для ключа 1 связанная с лямбдой функция lambda s: s * A[1] . Я попытался с пониманием dict, но кажется, что встроенные функции заканчиваются с последним значением цикла.

 d = {k, lambda s: s * A[k] for k in range(n)} # eg n = 4 

После этого все созданные лямбда-функции объявляются с помощью A[3] вместо A[0], A[1], A[2] и A[3] . Что случилось с этим кодом?

2 Solutions collect form web for “Понимание словаря со встроенными функциями”

Чтобы исправить это, нужно изменить код:

 d = {k: lambda s, k=k: s * A[k] for k in range(n)} 

Без привязки Python просматривает «текущий» k когда вызывается каждая лямбда, которая всегда является n-1 в исходном коде.

Проблема возникает, поскольку содержимое лямбда-функции не выполняется до тех пор, пока не будет выполнена лямбда-функция.

Следовательно, всякий раз, когда вы пытаетесь вызвать лямбда-функцию, она работает с последним значением k (если вы делаете del k и пытаетесь вызвать функцию лямбда, вы должны получить ошибку).

Ответ @ YS-L должен быть хорошим для вас.

Другой способ сделать это – сделать значение словарей связанным методом, привязывая значение k. Пример –

 >>> d = {k:(lambda k,s: s * A[k]).__get__(k) for k in range(n)} >>> d {0: <bound method int.<lambda> of 0>, 1: <bound method int.<lambda> of 1>, 2: <bound method int.<lambda> of 2>, 3: <bound method int.<lambda> of 3>} >>> A [1, 2, 3, 4] >>> d[0](1) 1 >>> d[1](1) 2 >>> d[2](1) 3 >>> d[3](1) 4 
  • Как добавить элемент в верхней части OrderedDict в python?
  • словарь для доступа к python с подстановочными знаками
  • Python, сохраните файл dict в базе данных
  • Найти ключ в словаре python и вернуть его родителей
  • фильтр список значений в словаре
  • Преобразование строкового представления словаря в словарь?
  • Python преобразует список пар в словарь
  • Доступ к элементам в заказе
  •  
    Interesting Posts for Van-Lav

    Django – перестроить строку запроса без одной из переменных

    Tensorflow error "Tensorshape () должен иметь ранг 1"

    Ошибка Django / Haystack: elasticsearch.exceptions.RequestError: TransportError (400, 'parsing_exception', …)

    Проблема Django inspectdb с использованием базы данных Oracle

    Что происходит в tf.train.shuffle_batch и `tf.train.batch?

    Преобразование строки IP-адреса в двоичный код в Python

    Итерировать через каждое значение списка по порядку, начиная со случайного значения

    Какой виджет вы используете для таблицы Excel в tkinter?

    "ПРЕДУПРЕЖДЕНИЕ conda.gateways.disk: exp_backoff_fn (47): Неисправность с ошибкой 41" во время "установки конда"

    Как использовать схемы в Django?

    Использование Cython для связывания Python с общей библиотекой

    SQLAlchemy отношение «многие ко многим» в декларативных таблицах

    где я могу найти пакет python xml.dom для python-2.6.0-8.9.28, и у меня есть версия Linux версии suse / x86_64

    Есть ли способ начать модульные тесты, связанные только с измененным кодом?

    Как уменьшить цветовую палитру с помощью PIL

    Python - лучший язык программирования в мире.