4

Python コード:

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ループが終了した後も存続しますか?

4

1 に答える 1

8

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

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

スコープは静的に決定されますが、動的に使用されます。実行中はいつでも、名前空間に直接アクセスできるネストされたスコープが少なくとも 3 つあります。

  • 最初に検索される最も内側のスコープには、ローカル名が含まれます
  • 最も近い外側のスコープから検索される外側の関数のスコープには、非ローカル名だけでなく非グローバル名も含まれます
  • 最後から2番目のスコープには、現在のモジュールのグローバル名が含まれています
  • 最も外側のスコープ (最後に検索される) は、組み込みの名前を含む名前空間です
于 2012-04-16T00:51:04.940 に答える