python - diferencias entre "d=dict()" y "d={}"
performance dictionary (5)
$ python2.7 -m timeit ''d={}''
10000000 loops, best of 3: 0.0331 usec per loop
$ python2.7 -m timeit ''d=dict()''
1000000 loops, best of 3: 0.19 usec per loop
¿Por qué usar uno sobre el otro?
Como dijo Thomas, uso dict () para poder especificar palabras clave. Especialmente si estoy construyendo manualmente un diccionario grande para la inicialización de datos o lo que sea; el poder usar la sintaxis de palabras clave me ahorra dos pulsaciones de teclas (y el desorden visual asociado) para cada elemento.
Doug Hellmann escribió una comparison exhaustiva de la diferencia de rendimiento.
Si las personas usan (simplemente) dict()
sobre (solo) {}
, generalmente se debe a que no saben {}
(lo cual es toda una hazaña), o porque creen que es más claro (lo cual es subjetivo, pero poco común).
Sin embargo, hay cosas que puedes hacer con dict
que no puedes hacer con {}
, como pasárselo a algo que espera una invocación, como collections.defaultdict(dict)
. También está el hecho de que puedes llamar a dict
con argumentos de palabras clave, que algunas personas prefieren:
>>> dict(spam=1, ham=2)
{''ham'': 2, ''spam'': 1}
Personalmente, prefiero la sintaxis literal dict porque funciona mejor cuando quieres usar claves que no son identificadores válidos:
>>> dict(pass=1)
File "<stdin>", line 1
dict(pass=1)
^
SyntaxError: invalid syntax
>>> dict(''ham and eggs''=1)
File "<stdin>", line 1
SyntaxError: keyword can''t be an expression
(y mezclar estilos simplemente porque algunas claves no son identificadores válidos, ¡puaj!)
Soy uno de los que prefiere las palabras a la puntuación. Es una de las razones por las que elegí Python sobre Perl, por ejemplo. "La vida es mejor sin llaves" (un antiguo lema de Python que aparecía en una camiseta con una caricatura de un adolescente sonriente ;-), después de todo (originalmente tenía la intención de referirse a llaves vs sangría para agrupar, por supuesto, pero, hey , las llaves son llaves! -).
El "pago" de algunos nanosegundos (con el fin de utilizar una palabra corta clara y legible en lugar de llaves, corchetes y otros) es generalmente asequible (es principalmente el costo de las búsquedas en el espacio de nombres integrado, un precio que usted paga cada vez que use un tipo de función o función incorporada, y puede optimizarlo levemente de vuelta alzando algunas búsquedas de bucles).
Entonces, generalmente soy el que le gusta escribir dict()
para {}
, list(L)
en lugar de L[:]
así como list()
para []
, tuple()
para ()
, y así sucesivamente - solo una preferencia de estilo general para el código pronunciable . Cuando trabajo en una base de código existente que usa un estilo diferente, o cuando mis compañeros de equipo en un nuevo proyecto tienen fuertes preferencias en la otra forma, puedo aceptarlo, por supuesto (no sin intentar un poco de evangelización en el caso de los compañeros de equipo, aunque ;-).