2016-09-12 14 views
1

私はこれを理解することはできませんが、 "text"という深さ3の文字列配列を持っています。同じループを2回実行しますが、結果が異なる

それはどのように次のコードであることになります

print "FIRST" 
for gate in text[1:]: 
    print "GATE" 
    for text in gate: 
     print "TEXT" 
     for entry in text: 
      print "ENTRY" 
      print what 

print "SECOND" 

for gate in text[1:]: 
    print "GATE" 
    for text in gate: 
     print "TEXT" 
     for entry in text: 
      print "ENTRY" 
      print what 

私は、各ループごとに異なる出力を取得します。

"第一"

FIRST 
GATE 
TEXT 
ENTRY 
א 

ENTRY 
מחברת אל"ף 

ENTRY 
אחל לבאר לשון יהודית, להעמיד כל מלה כפי שאת, יש מלה רבת פנים ולא יתבונן המשכיל יסודותיה, כי אם במהות ענינה אשר סביבותיה למרבית פניה, כי המלה מושכת והולכת עד אשר מתחלקת ממראה אחד עד חמשה עשר פנים, על כן יש מלה אשר הענין ימשכנה ויורה עליה וילמד על גזרתה. ויש מלה אשר היא מושכת הענין ומבארת הפתרון ושכל סודו, וכה הוא פתרון הלשון ופשר המלים לפי מחלקותיהם ותוצאותיהם. 

TEXT 
ENTRY 
אב. 

は、 "第二"

SECOND 
GATE 
TEXT 
ENTRY 
מ 
TEXT 
ENTRY 
ת 
TEXT 
ENTRY 
ח 
TEXT 
ENTRY 
ל 
TEXT 
ENTRY 

各ループはまったく同じコード化され、まだ私は別の出力を得ます。これはどのように可能ですか?

答えて

7

forループ "リーク"変数。 gate,text、およびentryはそれぞれのループにスコープされると予想されますが、実際はグローバルです。だから、次のループに影響を与えるこのループ

for text in gate: 

textの値が変更された、の終わりに。ここで

は、より多くの最小限の例です:

x = 'abc' 

for x in x: 
    print x, 
# output: "a b c" 

for x in x: 
    print x, 
# output: "c" 

(2回同じコードを実行し、同じ結果を得ることができるということは、あなたが貴重な見つけるものの一種である場合には、Pythonはの正しい選択ではないかもしれませんこのプロパティを持っている言語はlovelyです。

6

textが変更されました。 SECONDループの前に、textの値は、最後の反復から取得しましたfor text in gate: ...

内部ループ変数の名前を変更することを検討してください。

関連する問題