He mirado recientemente en el uso de list()
, dict()
, tuple()
en lugar de []
, {}
, y ()
, respectivamente, cuando la necesidad de crear un vacío uno de de los tres. El razonamiento es que parecía más legible. Iba a pedir opiniones sobre el estilo, pero luego decidí probar el rendimiento. Hice esto:¿Por qué son list(), dict() y tuple() más lentos que [], {} y()?
>>> from timeit import Timer
>>> Timer('for x in range(5): y = []').timeit()
0.59327821802969538
>>> from timeit import Timer
>>> Timer('for x in range(5): y = list()').timeit()
1.2198944904251618
Probé dict()
, tuple()
y list()
y la versión llamada a la función de cada uno era increíblemente peor que la versión sintáctica ({}
[]
, ()
) Por lo tanto, tengo 3 preguntas:
- ¿Por qué las llamadas a funciones son más caras?
- ¿Por qué hay tanta diferencia?
- ¿Por qué diablos se tardan 1,2 segundos para crear 5 listas vacías en mi temporizador? Sé que
timeit
desactiva la recolección de basura, pero eso no podría tener un efecto cuando considero que solo usérange(5)
. Se requieren
re: estilo de opinión - Yo uso [] con bastante frecuencia. Creo que es lo suficientemente claro. La pregunta de rendimiento es interesante sin embargo. – nmichaels
Hay muchas cosas que se ven raras en python hasta que te acostumbras. Siempre preferiría '[]' a 'list()' porque 'list()' podría no ser '__builtins__. List'. el comprador tenga cuidado. – SingleNegationElimination