Rendimiento perfilado de len (set) frente a set .__ len __ () en Python 3 [duplicado]
Esta pregunta ya tiene una respuesta aquí:
¿Por qué la función 'len' de Python es más rápida que el método __len__? 2 respuestas Mientras perfilaba la aplicación de mi Python, descubrí quelen()
parece ser muy costoso cuando se usan conjuntos. Vea el siguiente código:
import cProfile
def lenA(s):
for i in range(1000000):
len(s);
def lenB(s):
for i in range(1000000):
s.__len__();
def main():
s = set();
lenA(s);
lenB(s);
if __name__ == "__main__":
cProfile.run("main()","stats");
De acuerdo con las estadísticas del perfilador a continuación,lenA()
parece ser 14 veces más lento quelenB()
:
ncalls tottime percall cumtime percall filename:lineno(function)
1 1.986 1.986 3.830 3.830 .../lentest.py:5(lenA)
1000000 1.845 0.000 1.845 0.000 {built-in method len}
1 0.273 0.273 0.273 0.273 .../lentest.py:9(lenB)
¿Me estoy perdiendo de algo? Actualmente uso__len__()
en lugar delen()
, pero el código se ve sucio: