2016-12-09 24 views
1

可変スコープに関する簡単な質問:main関数で宣言された変数に外部関数からアクセスできるのはなぜですか?私。なぜ次のように「はい」と表示されますか?main関数で宣言された変数の範囲は?

def run(): 
    print var 

if __name__ == '__main__': 
    var = 'yes' 
    run() 

「これをオフにする」方法はありますか?良いコードを書くという点では、変数を引数として関数に渡すことを見落とすことができず、コードを実行することはできません。

+1

ています「主な機能」ではない。 if文です。 'main'(または何か他のもの)と呼ばれる関数を定義し、好きなだけ' if'の中で呼び出すことができます。 – Ryan

+2

あなたのコードには主な機能がないという誤解があります。そこにある唯一の関数は 'run()'と 'run'です。もちろん、すべての外部変数を見ることができます(それらは変更しません)。 – ImportanceOfBeingErnest

答えて

3

if文はPythonで新しいスコープを作成しません。 「これをオフにする」方法はありません。言語の仕組みの中核部分です。

あなたは新しいスコープでそれをラップする主な機能を使用します(これはあなたが何をしたいのか通常は、名前空間を混乱を避ける)ことができ、ようにあなたの主なガードからそれを呼び出す:

def run(): 
    print var 

def main(): 
    var = 'yes' 
    run() 

if __name__ == '__main__': 
    main() 
関連する問題