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.
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.
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).
list
è un nome globale che può essere sovrascritto durante il runtime. list()
chiama quel nome.
[]
è sempre un elenco letterale.
Si noti che solo le persone terribili sovrascrivono 'list'. (È un buon punto, però.): P – Doorknob
@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. :) –
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.
Direi che questa è la distinzione più importante, poiché è quella che produce effettivamente risultati diversi. – SethMMorton
Questo vale per qualsiasi iterabile. – orlp
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
Altre domande: 'dict()' e '{}', 'tupla()' e '()', ecc. –
Correlati: [Prestazioni di inizializzazione di oggetti Python] (https://stackoverflow.com/questions/ 13991248/python-object-initialisation-performance) – ShadowRanger