2012-04-16 54 views
4

Pythonコード:Pythonで変数がCより長く(なぜスコープが大きい)生きるのですか?

for i in xrange(10): 
    for j in xrange(5): 
     pass 

# The for-loop ends, but i,j still live on 
print i,j # 9, 4 

Cコード:

for(int i=0; i<=10; i++) 
    for(int =0; j<=5; j++) 
     ; 

// The for-loop ends, so i,j can't be accessed, right? 
printf("%d, %d", i, j); // won't compile 

ので、Pythonでの変数はforループが終了した後も生きでしょうか?

+0

私はコードがあなたと同等ではないと思います。私はPythonに慣れていませんが、 'i'が既にpythonで宣言されているのは' for'の外にあるのに対し、 'i'はforループのローカルです。 – Ankit

+0

同等のCコードでは、forループ(int i、j;)の外側でiとjを宣言し、forループでそれらを代入するだけです。 – Joe

+0

@Joe私はあなたが_could_を意味すると思います。_should_ではありません。ポイントはPythonで、あなたはループのスコープのローカル変数を宣言できません。 – agf

答えて

8

Pythonでは、関数、モジュール、およびクラス定義の本体のみがスコープの輪郭を描いています。他の制御構造はそうではありません。

これに関する基本的な情報は、Pythonチュートリアルの「クラス」ページのPython Scopes and Namespacesセクションにあります。 1つの重要な部分:

スコープは静的に決定されますが、動的に使用されます。

  • 最初に検索された最も内側のスコープは、ローカル名
  • ある任意の囲み機能のスコープが含まれています実行中いつでも、その名前空間に直接アクセス可能である少なくとも三つの入れ子になったスコープがあります最も近いスコープから検索され、非ローカルでグローバル以外の名前が含まれています
  • 最後の次のスコープには現在のモジュールのグローバル名が含まれます
  • 最後に検索されたスコープは、イン名
+2

はい、「Learning Python」という本のlegbルールもご覧ください:http://books.google.com.hk/books?id=1HxWGezDZcgC&pg=PA412&lpg=PA412&dq=python+LGB+scope&source=bl&ots=LjHh-Mfbr0&sig= JKatyA0rvni3wkjBRSN99iDyS5w&HL = EN&SA = X&EI = i26LT8r-EIiyiQfE2N2xBg&redir_esc = Y&HL = ZH-CN&ソースID = cndr#V = 1ページ分&Q =パイソン%20LGB%20scope&F =そのリンク@WooParadog偽 – WooParadog

+0

は私 のために動作しない(何も言葉が本の中で表示されていません)、プラス英語ではありません。 [books.google.comのリンクはこちらです(http://books.google.com/books?id=1HxWGezDZcgC&pg=PA412&lpg=PA412&dq=python+LGB+scope#v=onepage&q=python%20LGB%20scope&f=false ) – agf

関連する問題