python destructuring

Desestructuración de la tarea de Python



subplot title python (1)

Estas tres expresiones parecen ser equivalentes:

a,b,c = line.split() (a,b,c) = line.split() [a,b,c] = line.split()

¿Se compilan al mismo código?

¿Cuál es más pitón?


Según dis , todos se compilan al mismo bytecode:

>>> def f1(line): ... a,b,c = line.split() ... >>> def f2(line): ... (a,b,c) = line.split() ... >>> def f3(line): ... [a,b,c] = line.split() ... >>> import dis >>> dis.dis(f1) 2 0 LOAD_FAST 0 (line) 3 LOAD_ATTR 0 (split) 6 CALL_FUNCTION 0 9 UNPACK_SEQUENCE 3 12 STORE_FAST 1 (a) 15 STORE_FAST 2 (b) 18 STORE_FAST 3 (c) 21 LOAD_CONST 0 (None) 24 RETURN_VALUE >>> dis.dis(f2) 2 0 LOAD_FAST 0 (line) 3 LOAD_ATTR 0 (split) 6 CALL_FUNCTION 0 9 UNPACK_SEQUENCE 3 12 STORE_FAST 1 (a) 15 STORE_FAST 2 (b) 18 STORE_FAST 3 (c) 21 LOAD_CONST 0 (None) 24 RETURN_VALUE >>> dis.dis(f3) 2 0 LOAD_FAST 0 (line) 3 LOAD_ATTR 0 (split) 6 CALL_FUNCTION 0 9 UNPACK_SEQUENCE 3 12 STORE_FAST 1 (a) 15 STORE_FAST 2 (b) 18 STORE_FAST 3 (c) 21 LOAD_CONST 0 (None) 24 RETURN_VALUE

Así que todos deberían tener la misma eficiencia. En lo que respecta a la mayoría de los Pythonic, es un poco de opinión, pero preferiría la primera opción o (en menor medida) la segunda opción. Usar los corchetes es confuso porque parece que estás creando una lista (aunque resulta que no lo estás).