基本for循環,我需要幫助瞭解如何循環的話:Python的一個字字'循環
word = "hello"
for word in word:
print word
豈不word=hello
變量與word=h
覆蓋只要for循環開始了嗎? 如果是這樣,它是如何遍歷字串中的所有字母?
在此先感謝您的澄清。
基本for循環,我需要幫助瞭解如何循環的話:Python的一個字字'循環
word = "hello"
for word in word:
print word
豈不word=hello
變量與word=h
覆蓋只要for循環開始了嗎? 如果是這樣,它是如何遍歷字串中的所有字母?
在此先感謝您的澄清。
讓我們看字節碼:
>>> 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
http://www.shutupandship.com/2012/01/understanding-python-iterables-and.html這也是一個很好的消除它如何工作:) – gkocjan 2014-09-12 12:01:49
值得指出的是,因爲'for'循環不會創建一個新的作用域,名稱'word'在循環完成後不再引用字符串'「hello」',而是字符串'「o」'。 – chepner 2014-09-12 12:07:35
完美,我有一個輕微的懷疑這是它的工作原理,但這真的幫助我理解它!非常感謝你:) – Djfluffwug 2014-09-12 12:14:31