2014-09-12 84 views
3

基本for循環,我需要幫助瞭解如何循環的話:Python的一個字字'循環

word = "hello" 
for word in word: 
    print word 

豈不word=hello變量與word=h覆蓋只要for循環開始了嗎? 如果是這樣,它是如何遍歷字串中的所有字母?

在此先感謝您的澄清。

回答

12

讓我們看字節碼:

>>> def so25807731(): 
... word = "hello" 
... for word in word: 
...  print word 
... 
>>> import dis 
>>> dis.dis(so25807731) 
    2   0 LOAD_CONST    1 ('hello') 
       3 STORE_FAST    0 (word) 

    3   6 SETUP_LOOP    19 (to 28) 
       9 LOAD_FAST    0 (word) 
      12 GET_ITER    
     >> 13 FOR_ITER    11 (to 27) 
      16 STORE_FAST    0 (word) 

    4   19 LOAD_FAST    0 (word) 
      22 PRINT_ITEM   
      23 PRINT_NEWLINE  
      24 JUMP_ABSOLUTE   13 
     >> 27 POP_BLOCK   
     >> 28 LOAD_CONST    0 (None) 
      31 RETURN_VALUE   

注意如何第一,巨蟒抓住的字符串迭代器(GET_ITER )並循環遍歷,而不是實際的字符串(FOR_ITER)。

因此,它不需要原始字符串來「記住」字符是什麼;它只是使用新創建的迭代器。 「舊word」值已不再使用,因此您可以毫無問題地覆蓋它。同樣的邏輯也解釋了爲什麼這個代碼可以作爲很好:

word = "llamas" 
for character in word: 
    word = None 
    print character 
+0

http://www.shutupandship.com/2012/01/understanding-python-iterables-and.html這也是一個很好的消除它如何工作:) – gkocjan 2014-09-12 12:01:49

+0

值得指出的是,因爲'for'循環不會創建一個新的作用域,名稱'word'在循環完成後不再引用字符串'「hello」',而是字符串'「o」'。 – chepner 2014-09-12 12:07:35

+0

完美,我有一個輕微的懷疑這是它的工作原理,但這真的幫助我理解它!非常感謝你:) – Djfluffwug 2014-09-12 12:14:31

-3

我從來沒有編碼的蟒蛇,但我客串它會像這樣工作

word = "hello" 
i=0 
while i <len(word): 
    print word[i] 
    i += 1 
+0

更新增量我 – 2014-09-12 11:59:21

+0

可以看到,你從來沒有編碼的Python。這是一堆反模式。 – Matthias 2014-09-12 12:01:02

+1

但它不回答問題。問題是爲什麼它打印整個單詞,而不僅僅是第一個字母。 – gkocjan 2014-09-12 12:03:03