基本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