Loading... # 为什么for循环的效率比列表推导低? ## for循环版本 ```python dis.dis('for i in array: a.append(i+1)') ``` ```python 1 0 SETUP_LOOP 26 (to 28) 2 LOAD_NAME 0 (array) 4 GET_ITER >> 6 FOR_ITER 18 (to 26) 8 STORE_NAME 1 (i) 10 LOAD_NAME 2 (a) 12 LOAD_ATTR 3 (append) 14 LOAD_NAME 1 (i) 16 LOAD_CONST 0 (1) 18 BINARY_ADD 20 CALL_FUNCTION 1 22 POP_TOP 24 JUMP_ABSOLUTE 6 >> 26 POP_BLOCK >> 28 LOAD_CONST 1 (None) 30 RETURN_VALUE ``` ## 列表推导式版本 ```python dis.dis('[x+1 for x in array]') ``` ```python 1 0 LOAD_CONST 0 (<code object <listcomp> at 0x00000163C9D04C00, file "<dis>", line 1>) 2 LOAD_CONST 1 ('<listcomp>') 4 MAKE_FUNCTION 0 6 LOAD_NAME 0 (array) 8 GET_ITER 10 CALL_FUNCTION 1 12 RETURN_VALUE ``` ## 上面已经从本质说明了为什么会这样(大致可以体现) 下面我们从具体表现来看: ```python #循环 array=range(1000) a=[] %timeit for i in array: a.append(i+1) ``` ``` 79.5 µs ± 2.83 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each) ``` ```python #列表推导 %timeit [x+1 for x in array] ``` ``` 34 µs ± 508 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each) ``` 可以看出有两倍的差距 ## 总结 列表推导属于python语法糖的一种 但我们也没有必要去讲究何时用何时不用。因为具体的速度还是不一定的 。并且,列表推导的目的只是为了生成列表,如果你想生成其他玩意,可以去研究生成器表达式。用于生成除了列表以外的序列 Last modification:May 8, 2022 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 1 如果觉得我的内容对你有用,请随意赞赏
One comment
学习了。。