Care este diferența dintre list() și [] [duplicat] (Programare, Python)

lang2 a intrebat.

Care este diferența dintre următorul cod:

foo = list()

și

foo = []

Python sugerează că există un singur mod de a face lucrurile, dar uneori se pare că există mai multe.

Comentarii

  • Alte întrebări: dict() și {}, , tuple() și (), , etc. –  > Por Cristal Casimir.
  • Înrudite: Performanța inițializării obiectelor Python –  > Por ShadowRanger.
3 răspunsuri
tckmn

Unul este un apel de funcție și unul este un literal:

>>> 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        

Utilizați a doua formă. Este mai pythonic și este probabil mai rapid (deoarece nu implică încărcarea și apelarea unei funcții separate).

Andrew Sun

De dragul completării, un alt lucru care trebuie menționat este că list((a,b,c)) va returna [a,b,c], , în timp ce [(a,b,c)] nu va descompune tupla. Acest lucru poate fi util atunci când doriți să convertiți un tupluplu într-o listă. Funcționează și invers, tuple([a,b,c]) returnează (a,b,c).

Editare: După cum menționează orlp, acest lucru funcționează pentru orice iterabil, nu doar pentru tupluri.

Comentarii

  • Aș spune că aceasta este cea mai importantă distincție, deoarece este cea care produce de fapt rezultate diferite. –  > Por SethMMorton.
  • Acest lucru este valabil pentru orice iterabil. –  > Por orlp.
  • Total de acord cu @SethMMorton: list() acceptă doar iterabile ca argument, în timp ce [] înfășoară pur și simplu orice îi veți arunca cu o listă. Astfel, dacă încercați să executați list(1) veți primi o excepție, deoarece int nu este iterabil, în timp ce [1] va funcționa foarte bine. De asemenea, se explică proprietatea de despachetare! –  > Por Nir Alfasi.
  • O altă distincție este atunci când le apelați pe amândouă la funcția map(). Una va converti obiectul într-o listă, în timp ce cealaltă va înfășura pur și simplu obiectul cu []. –  > Por Dr. Younes Henni.
orlp

list este un nume global care poate fi suprascris în timpul execuției. list() numește acest nume.

[] este întotdeauna o listă literală.

Comentarii

  • Rețineți că numai persoanele teribile suprascriu list. (Totuși, este o observație bună.) 😛 –  > Por tckmn.
  • @Doorknob: După cum arată toate întrebările de pe SO, unde list (și str și dict) sunt folosite ca nume de variabile, tind să fiu de acord. 🙂 –  > Por PM 2Ring.

Tags: