Понимание словаря с помощью встроенных функций

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

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

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

10 голосов | спросил Alejandro Sazo 15 J000000Wednesday15 2015, 07:40:04

1 ответ


0

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

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

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

ответил YS-L 15 J000000Wednesday15 2015, 07:48:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132