私はこのコードを書きました:
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 のようなレキシカル スコープの言語に変換された上記が確実に機能するためです。