python中for语句涉及的序列可以是关系表达式吗_为什么我可以在Python for循环中为迭代器和序列使用相同的名称?...
x告訴我們什么:
Python 3.4.1 (default, May 19 2014, 13:10:29)
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from dis import dis
>>> dis("""x = [1,2,3,4,5]
... for x in x:
... print(x)
... print(x)""")
1 0 LOAD_CONST 0 (1)
3 LOAD_CONST 1 (2)
6 LOAD_CONST 2 (3)
9 LOAD_CONST 3 (4)
12 LOAD_CONST 4 (5)
15 BUILD_LIST 5
18 STORE_NAME 0 (x)
2 21 SETUP_LOOP 24 (to 48)
24 LOAD_NAME 0 (x)
27 GET_ITER
>> 28 FOR_ITER 16 (to 47)
31 STORE_NAME 0 (x)
3 34 LOAD_NAME 1 (print)
37 LOAD_NAME 0 (x)
40 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
43 POP_TOP
44 JUMP_ABSOLUTE 28
>> 47 POP_BLOCK
4 >> 48 LOAD_NAME 1 (print)
51 LOAD_NAME 0 (x)
54 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
57 POP_TOP
58 LOAD_CONST 5 (None)
61 RETURN_VALUE
關鍵位是第2和第3部分 - 我們從x(x)加載該值,然后我們得到它的迭代器(x)并開始迭代它(28 FOR_ITER)。 Python永遠不會再回來加載迭代器了。
旁白:這樣做沒有任何意義,因為它已經有了迭代器,正如Abhijit在他的回答中指出的那樣,Python規范的7.3節實際上需要這種行為)。
當名稱x被覆蓋以指向列表中的每個值(以前稱為x)時,Python在查找迭代器時沒有任何問題,因為它永遠不需要再次查看名稱x來完成迭代協議。
總結
以上是生活随笔為你收集整理的python中for语句涉及的序列可以是关系表达式吗_为什么我可以在Python for循环中为迭代器和序列使用相同的名称?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++学习之路 | PTA乙级—— 10
- 下一篇: 复选框怎么点td选中_jQuery点击t