1

このコードの実行:

import re
regex = re.compile("hello")
number = 0
def test():
  if regex.match("hello"):
    number += 1

test()

このエラーが発生します:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    test()
  File "test.py", line 10, in test
    number += 1
UnboundLocalError: local variable 'number' referenced before assignment

regex関数内から参照できるのに、参照できないのはなぜnumberですか?

4

1 に答える 1

2

number関数内で呼び出される新しい変数を定義しているためです。

コードが効果的に行うことは次のとおりです。

def test():
    if regex.match("hello"):
        number = number + 1

number =Pythonが最初にこの関数をコンパイルするとき、それがわかるとすぐに、それはnumberローカルになります。numberその関数内への参照は、それがどこに表示されていても、新しいローカルを参照します。グローバルは影になっています。したがって、関数が実際に実行されて計算しようとするとnumber + 1、Pythonはまだ値が割り当てられていないローカルを参照します。 number

これはすべて、Pythonに変数宣言がないためです。ローカルを明示的に宣言しないため、関数の先頭ですべて暗黙的に宣言されます。

この場合、global number(独自の行で)を使用して、常にグローバルを参照するようにPythonに指示できますnumber。しかし、そもそもこれを必要としない方がよい場合がよくあります。ある種の動作とある種の状態を組み合わせたい場合、それがまさにオブジェクトの目的であるため、小さなクラスを作成して、それを1回だけインスタンス化することができます。

于 2013-02-15T05:54:45.000 に答える