5

今日は数学のテストがありましたが、追加のクレジット問題の 1 つは次のとおりでした。

product = 1
for i in range(1,7,2):
    print i
    product = product * i
print i
print product

簡単なループのステップをリストすることになっていた。しかし、なぜこのプログラムが実行されるのかと考えさせられました。2番目print iは場違いに思えます。ifor ループに対してのみ存在し、get が破棄されるため、2 番目を呼び出すとprint i変数がなく、エラーが発生すると思いiます。

iグローバル変数のままなのはなぜですか?

4

2 に答える 2

9

悪魔は細部に宿る

ネーミングとバインディング

ブロックは、ユニットとして実行される Python プログラム テキストの一部です。ブロックとは、モジュール、関数本体、およびクラス定義です。

または簡単に言えば、 afor loopはブロックではありません

スコープは、ブロック内の名前の可視性を定義します。ローカル変数がブロックで定義されている場合、そのスコープにはそのブロックが含まれます。定義が関数ブロックで発生する場合、含まれるブロックが名前の別のバインディングを導入しない限り、スコープは定義ブロック内に含まれるすべてのブロックに拡張されます。

したがって、定義された変数は、定義の時点からブロック、functionmoduleまたはclass定義のスコープの終わりまで表示されます。

なぜ私はグローバル変数のままなのですか?

命名法の用語から、i強調表示されたコードが定義済みの関数ではなくモジュールの一部である場合、グローバル変数を呼び出します。

于 2013-10-11T11:35:38.180 に答える