valor - listas por comprensión python
Bucle mientras verifica el elemento en una lista en Python (1)
Digamos que tengo un simple código como este:
for i in range(1000):
if i in [150, 300, 500, 750]:
print(i)
¿Se crea la lista [150, 300, 500, 750]
cada iteración del bucle? ¿O puedo asumir que el intérprete (por ejemplo, CPython 2.7) es lo suficientemente inteligente como para optimizar esto?
Puede ver el bytecode usando dis.dis
. Aquí está la salida para 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
Por lo tanto, la creación de la lista se optimiza para la carga de una tupla constante (byte 22). La lista (que en realidad es una tupla en este caso) no se crea de nuevo en cada iteración.