以下の2番目のケースでは、Pythonはローカル変数を探します。それが見つからなければ、なぜそれは第1の場合のように外側の範囲で見ることができないのですか?ネストされた関数が外部関数からの変数にアクセスできますが、それらを変更することはできません
これはローカルスコープにXを探し、その後、外側のスコープ:
def f1():
x = 5
def f2():
print x
これはlocal variable 'x' referenced before assignment
エラーを与える:
def f1():
x = 5
def f2():
x+=1
は私が関数f2(の署名を変更することは許されないのです)ので、私はxの値を渡して返すことはできません。しかし、私はxを変更する方法が必要です。外側のスコープ(global
キーワードに類似した何か)で変数名を探すようにPythonに明示的に指示する方法はありますか?
Pythonバージョン:Pythonの3.xでは2.7
python 3はこの目的のために '非ローカル 'を提供しますが、なぜあなたがこれを行う必要があるのかを尋ねる価値があると思います。これは 'global'を使うよりも少し安全ですが、それでも正しいとは感じません。 – mgilson
@ mgilsonこれには多くの理由があります。 pep-3104の根拠セクション。 – thebjorn
あなたはどのバージョンのpythonを使用しますか? – soulcheck