2015-11-15 54 views
10

Qual è la differenza tra il seguente codice:Qual è la differenza tra la lista() e []

foo = list() 

E

foo = [] 

Python suggerisce che non v'è un modo di fare le cose, ma a volte ci sembra essere più di uno.

+1

Altre domande: 'dict()' e '{}', 'tupla()' e '()', ecc. –

+0

Correlati: [Prestazioni di inizializzazione di oggetti Python] (https://stackoverflow.com/questions/ 13991248/python-object-initialisation-performance) – ShadowRanger

risposta

14

Uno è una chiamata di funzione, e uno è un letterale:

>>> import dis 
>>> def f1(): return list() 
... 
>>> def f2(): return [] 
... 
>>> dis.dis(f1) 
    1   0 LOAD_GLOBAL    0 (list) 
       3 CALL_FUNCTION   0 
       6 RETURN_VALUE   
>>> dis.dis(f2) 
    1   0 BUILD_LIST    0 
       3 RETURN_VALUE   

Utilizzare la seconda forma. È più Pythonic, ed è probabilmente più veloce (dal momento che non implica il caricamento e la chiamata a una funzione separata).

9

list è un nome globale che può essere sovrascritto durante il runtime. list() chiama quel nome.

[] è sempre un elenco letterale.

+5

Si noti che solo le persone terribili sovrascrivono 'list'. (È un buon punto, però.): P – Doorknob

+0

@Doorknob: Dall'aspetto di tutte le domande su SO in cui 'list' (e' str' e 'dict') vengono usati come nomi di variabili, tendo ad essere d'accordo. :) –

5

Per motivi di completamento, un'altra cosa da notare è che list((a,b,c)) restituirà [a,b,c], mentre [(a,b,c)] non decomprimerà la tupla. Questo può essere utile quando si desidera convertire una tupla in una lista. Anche il contrario funziona, tuple([a,b,c]) restituisce (a,b,c).

Modifica: come menzionato da orlp, questo funziona per tutte le iterabili, non solo per le tuple.

+2

Direi che questa è la distinzione più importante, poiché è quella che produce effettivamente risultati diversi. – SethMMorton

+1

Questo vale per qualsiasi iterabile. – orlp

+2

Totalmente d'accordo con @SethMMorton: 'list()' accetta solo iterables come argomento, mentre '[]' semplicemente avvolge qualunque cosa tu gli passi con una lista. Quindi, se proverai a eseguire 'list (1)' otterrai un'eccezione poiché 'int' non è iterable, mentre' [1] 'funzionerà bene. Spiega anche la proprietà di disimballaggio! – alfasin

Problemi correlati