Понимание лямбда - PullRequest
       5

Понимание лямбда

0 голосов
/ 21 декабря 2009
X = 5
L = list(map(lambda x: 2**X, range(7)))
print (L)

... Я ожидаю, что это вернется:

[1, 2, 4, 8, 16, 32, 64]

... вместо этого он возвращает:

[32, 32, 32, 32, 32, 32, 32]

Что я делаю не так?

Ответы [ 4 ]

10 голосов
/ 21 декабря 2009

Python чувствителен к регистру, поэтому lambda x: 2**X означает: взять аргумент, вызвать его (строчные буквы) x, полностью его игнорировать и вернуть 2 в степень глобальной переменной (прописные буквы) X.

4 голосов
/ 21 декабря 2009

Python чувствителен к регистру. x и X - это разные переменные.

Кстати, возможно, более простой способ построить L будет

L=[2**x for x in range(7)]

Или, если вы хотите использовать map и lambda, тогда

L=map(lambda x: 2**x, range(7))

достаточно. map возвращает список, поэтому вам не нужно переносить выражение в list(...).

2 голосов
/ 21 декабря 2009

Попробуйте L = list(map(lambda x: 2**x, range(7))) один раз. Вы использовали X вместо x.

0 голосов
/ 21 декабря 2009

У вас есть опечатка. Должно быть:

# Upper case X refers to 5
list(map(lambda x: 2**x, range(7)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...