The tnotstar's Website

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