繁体   English   中英

循环时检查Python中列表中的元素

[英]Loop while checking if element in a list in Python

假设我有一段简单的代码:

for i in range(1000):
    if i in [150, 300, 500, 750]:
        print(i)

列表[150, 300, 500, 750]是否在循环的每次迭代中都被创建? 或者我可以假设解释器(比方说,CPython 2.7)足够智能来优化它吗?

您可以使用dis.dis查看字节码。 这是CPython 2.7.11的输出:

  2           0 SETUP_LOOP              40 (to 43)
              3 LOAD_GLOBAL              0 (range)
              6 LOAD_CONST               1 (1000)
              9 CALL_FUNCTION            1
             12 GET_ITER            
        >>   13 FOR_ITER                26 (to 42)
             16 STORE_FAST               0 (i)

  3          19 LOAD_FAST                0 (i)
             22 LOAD_CONST               6 ((150, 300, 500, 750))
             25 COMPARE_OP               6 (in)
             28 POP_JUMP_IF_FALSE       13

  4          31 LOAD_FAST                0 (i)
             34 PRINT_ITEM          
             35 PRINT_NEWLINE       
             36 JUMP_ABSOLUTE           13
             39 JUMP_ABSOLUTE           13
        >>   42 POP_BLOCK           
        >>   43 LOAD_CONST               0 (None)
             46 RETURN_VALUE      

因此,列表创建被优化为加载常量元组(字节22)。 列表(在这种情况下实际上是一个元组)不会在每次迭代时重新创建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM