Так что я получил некоторый код, похожий на этот (этот код воспроизводит мой вопрос, даже если он ничего полезного не делает):имя Python затенения путаница
def fn():
l = ["foo", "bar", "baz"]
print map(lambda f : len(f), l)
for i, f in enumerate(l):
print i, f
И PyCharm сообщает, что моя декларация lambda f
«Название теней f из внешнего пространства». Это связано с тем, что переменная повторно используется при вызове enumerate()
в следующей строке.
Код работает, как ожидалось, но что здесь происходит? Правильно ли я полагаю, что Python решает, что f
является локальной переменной в fn
и предупреждает меня, что использование f
внутри лямбда не будет таким же f
, определяемым локально, даже если лямбда использует имя переменной f
сначала?
Помимо переименования переменных, существует ли наилучшая практика для избежания этого - или я должен просто использовать свое мнение и игнорировать предупреждение в этом случае?
Если это имеет значение, это в Python 2.7. – Floomi
Просто используйте 'print map (len, l)'. – Ryan
Это пример игрушки, иллюстрирующий язык, а не производственный код. – Floomi