Я написал этот код:
x = 0
def counter():
x = 1
def temp(self):
print x
x += 1
return temp
Попытка проверить, является ли python лексической или динамической областью видимости. Я думал, что
y = counter()
y()
должен либо вывести 0, либо 1, и это расскажет мне, как определяется область видимости Python. Однако вызов y вызывает исключение, в котором говорится, что x не определено. Кажется, в моем понимании того, как работает Python, есть что-то принципиально неправильное.
Кто-нибудь может объяснить, как это работает? Да, я знаю, что это легко сделать с помощью объектов. Я пытаюсь изучить идею предоставления функции состояния без использования объектов. Я написал код таким образом, потому что приведенный выше перевод на язык с лексической областью видимости, такой как Scheme, определенно сработал бы.