2017-10-17 6 views
0

私は変数が宣言の後にしかアクセスできないと考えていました。 しかし明らかに、Pythonの名前解決は内側から外側を探すようになります。内部関数の後に変数を定義するのは悪い習慣ですか?

私の質問は、これは読みやすさの観点から悪い習慣ですか?私はこれがPythonistaの一般的な知識であると思っていたので、今からこの種のコードを書くことができます。

def outer(): 
    def inner(): 
     print x 
    x = ‘foo’ 
    inner() 
>>> outer() 
>>> ‘foo’ 
+0

'x'を定義する前にそのメソッドが宣言されていますが、実際にメソッド(' inner() ')を呼び出し、この時点で' x'が定義されている場合のみ評価されます。 –

+0

ありがとう!これは悪い習慣ですか? – steve

+0

それはゲッターとセッターについて私に思い出させるものです(https://stackoverflow.com/questions/2627002/whats-the-pythonic-way-to-use-getters-and-setters)私はそれがあなたが欲しい理由によると思いますこのようにしてください。それは悪い習慣であるとあなた自身が言うことはできません。 –

答えて

0

あなたがinner()を呼び出す、それが実行を開始します。行print xには、変数名xがあります。次に、関数innerの内部スコープに見え、変数xが見つかりません。それから、外側の範囲、つまり範囲がouterになります。この時点で既に変数xが定義されており(inner()呼び出しの前に行われているように)、この変数が使用されています。

+0

ありがとう!私はPythonがどのように変数を探すのか理解しています。 Pythonistaのこの共通の知識ですか?言い換えれば、これは可読性の点で悪い習慣であるかもしれないと私は迷っています。関数の前に変数を定義する必要がありますか? – steve

+0

はい、あなたはそれを「常識」と呼ぶことができます。初心者でないPythonプログラマーであれば、あなたのコードを見て、何が起こっているのかを理解できなければなりません。 – alexis

関連する問題