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

Мне нужно хранить функции в словаре, каждая функция зависит от ее ключа, скажем, для ключа 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 
  • Как реализованы встроенные словари Python
  • Выполнение функций в словаре переключателей
  • Строка UTF-8 как ключ в словаре вызывает KeyError
  • Словарь Python vs Если скорость сообщения
  • Возврат строки из CSV, если указанное значение в строке соответствует условию
  • Как извлечь словарную пару одного ключа в переменные
  • сравнивая два dict в python, чтобы получить максимальное значение для аналогичного ключа
  • DictCursor не работает под psycopg2
  • Избегайте вставки дубликатов в список Python с пониманием
  • python 2d массив для определения
  • класс или объект вместо словарей в Python 2
  •  
    Interesting Posts for Van-Lav

    Как удалить все строки в numpy.ndarray, которые содержат нечисловые значения

    Почему pickle __getstate__ принимает в качестве возвращаемого значения тот самый экземпляр, который требуется __getstate__ для рассола в первую очередь?

    Хеширование массивов в Python

    Переменная экземпляра Python как параметр по умолчанию

    Scipy.sparse.csr_matrix: Как получить десятку значений и индексов?

    python -> комбинации чисел и букв

    Почему это соединение сокета разрешает только 1 отправку и получение?

    Вычисление средних значений для каждого KEY в Pairwise (K, V) RDD в Spark с Python

    Python Popen – wait vs communication vs CalledProcessError

    Я не могу получить весь исходный код HTML-страницы

    Поймать события «до / после вызова функции» для всех функций класса

    Гистограмма Pandas отфильтрованного Dataframe

    список словарей в шаблоне jinja

    Получение количества сообщений в очереди RabbitMQ

    Измените IntegerProperty на FloatProperty существующего AppEngine DataStore

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