Как лямбда-функция ссылается на свои параметры в python?

Я новичок в Python. Моя задача была довольно простой - мне нужен список функций, которые я могу использовать для пакетной работы. Поэтому я поиграл с некоторыми примерами, такими как

fs = [lambda x: x + i for i in xrange(10)]

. Удивительно, но вызов

[f(0) for f in fs]

дал мне результат вроде [9, 9, 9, 9, 9, 9, 9, 9, 9, 9] . Это было не то, что я ожидал, поскольку я бы хотел, чтобы переменная i имела разные значения в разных функциях.

Итак, мой вопрос:

  1. Является ли переменная i в лямбда глобальный или локальный?

  2. Использует ли python то же понятие, что и «закрытие» в javascript? Я имею в виду, что каждая лямбда здесь содержит ссылку на переменную i или они просто содержат копию значения i в каждой?

  3. Что мне делать, если я например, в этом случае вывод будет [0, 1, ..... 9] ?

6
задан nalzok 3 August 2016 в 04:42
поделиться