擅长:python、mysql、java
<p>如果你问Python解释器是否能够通过完全跳过循环来优化,我想答案是否定的。如果你在一个空列表上查看迭代的字节码,那么所有的循环设置步骤仍然完成,并且为循环内的代码生成字节码(尽管它不会实际执行):</p>
<pre><code>import dis
def run_empty_loop():
a = []
for item in a:
x = 1 + 1
dis.dis(run_empty_loop)
2 0 BUILD_LIST 0
3 STORE_FAST 0 (a)
3 6 SETUP_LOOP 20 (to 29)
9 LOAD_FAST 0 (a)
12 GET_ITER
>> 13 FOR_ITER 12 (to 28)
16 STORE_FAST 1 (item)
4 19 LOAD_CONST 2 (2)
22 STORE_FAST 2 (x)
25 JUMP_ABSOLUTE 13
>> 28 POP_BLOCK
>> 29 LOAD_CONST 0 (None)
32 RETURN_VALUE
</code></pre>