Consejos y trucos (Tips & tricks)
Medir el tiempo que tarda en ejecutarse un segmento de código
Opción #1: Sentencias en una cadena de caracteres
Crear un script que invoque a timeit
, con nuestro código escrito en una cadena de caracteres (string):
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import timeit
code = r"""\
print("Hello, world!")
"""
if __name__ == "__main__":
print(timeit.timeit(code, number=1000), file=sys.stderr)
# EOF
Mejora: Puede ser más interesante leer la cadena de caracteres desde un fichero con formato
.py
:… with open("script.py") as input: code = input.read() …
Opción #2: Sentencias en una función
Invocar timeit
con la función a verificar pasada como parámetro:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import timeit
def code():
print("Hello, world!")
if __name__ == "__main__":
print(timeit.timeit(code, number=1000), file=sys.stderr)
# EOF
Opción #3: Usando la línea de comandos
Invocar timeit
desde la línea de comandos:
C:\> python -m timeit -n 1000 "print('Hello, world!')"
Fusionar colecciones (PEP 448: Unpacking Generalizations)
Fusionar listas (lists)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import timeit
setup_lists = r"""\
xs = [0, 1, 2, 3, 4]
ys = [9, 8, 7, 6]
"""
merge_lists = r"""\
zs = [*xs, *ys]
"""
if __name__ == "__main__":
print("{:0.8f}s ellapsed".format(timeit.timeit(merge_lists, setup_lists)))
# EOF
Fusionar conjuntos (sets)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import timeit
setup_sets = r"""\
xs = {0, 1, 2, 3, 4}
ys = {9, 8, 7, 6}
"""
merge_sets = r"""\
zs = {*xs, *ys}
"""
if __name__ == "__main__":
print("{:0.8f}s ellapsed".format(timeit.timeit(merge_sets, setup_sets)))
# EOF
Fusionar diccionarios (dicts)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import timeit
setup_dicts = r"""\
xs = {'a': 1, 'b': 2, 'c': 3}
ys = {'x': 7, 'y': 8, 'z': 9}
"""
merge_dicts = r"""\
zs = {*xs, *ys}
"""
if __name__ == "__main__":
print("{:0.8f}s ellapsed".format(timeit.timeit(merge_dicts, setup_dicts)))
# EOF