私はC、C#、Javaでプログラミングしました。今私はしばらくの間Pythonを使用していますが、今は私にとっては非常に混乱している可変スコープの理解にいくつかの問題が発生しました。例:可変スコープの混乱(外側スコープのシャドーイング変数)
def f1():
print(spam) # spam magically come from outer scope. ok...
def f2():
spam = "bbb" # assignment shadows variable from outer scope (logical result of f1)
print(spam) # printing local spam variable
def f3():
print(spam) # ERROR: unresolved reference 'spam'
spam = "ccc" # in f1 function everything was fine but adding assignment AFTER
# printing (in opposite to f2 function) causes error in line above
def f4():
print(spam) # nothing wrong here, assignment line below is commented
# spam = "ccc"
spam = "aaa"
機能が有効範囲外の変数に到達するのはなぜですか? なぜ、外側のスコープからのシャドーイング変数は、以前はそれを使用していなかった場合にのみOKですか?
ですがあなたは 'f3'で '未解決の参照エラー'を受け取るでしょうか?私はエラー 'UnboundLocalError:ローカル変数 'spam'が割り当て前に参照されていると期待します。これは自己説明的です。 – kazemakase
'f2'は' aaa'から 'bbb'への変数' spam 'を変更しています – mtkilic
@kazemakaseあなたが正しいと思いますが、私が書いたエラーはIDEからのものではなくランタイムからです – user3616181