Python中的'for word in word'循环

3 投票
2 回答
831 浏览
提问于 2025-04-21 07:22

这是一个基本的 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

撰写回答