Python中的'for word in word'循环
这是一个基本的 for 循环,我需要帮助理解这个循环是怎么工作的:
word = "hello"
for word in word:
print word
在 for 循环开始的时候,word=hello
这个变量不会被 word=h
覆盖吗?如果是这样的话,它是怎么能遍历这个单词字符串中的所有字母的呢?
提前感谢你的解释。
2 个回答
-3
我从来没有写过Python代码,但我猜它应该是这样工作的。
word = "hello"
i=0
while i <len(word):
print word[i]
i += 1
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
注意,Python 首先为字符串获取了一个迭代器(GET_ITER
),然后通过这个迭代器来循环,而不是直接使用原始字符串(FOR_ITER
)。
因此,它不需要原始字符串来“记住”字符是什么;它只是使用新创建的迭代器来完成这个任务。原来的 word
值实际上已经不再使用,所以你可以放心地覆盖它而不会出现问题。类似的逻辑也可以解释为什么下面的代码也能正常工作:
word = "llamas"
for character in word:
word = None
print character