python noobie scoping question

Я написал этот код:

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, определенно сработал бы.

8
задан amatsukawa 29 May 2011 в 23:11
поделиться