"Изучение Python, 4-е изд." упоминает, что:
переменная области видимости ищется, когда вложенные функции позже называются..
Однако я подумал, что при выходе из функции все ее локальные ссылки исчезают.
def makeActions():
acts = []
for i in range(5): # Tries to remember each i
acts.append(lambda x: i ** x) # All remember same last i!
return acts
makeActions()[n]
одинаков для каждого n
, потому что переменная i
каким-то образом просматривается во время вызова. Как Python ищет эту переменную? Не должно ли оно вообще существовать, потому что makeActions уже вышел? Почему Python не делает то, что интуитивно предлагает код, и не определяет каждую функцию, заменяя i ее текущим значением в цикле for во время выполнения цикла?