Python Timeit

Vaibhhav Khetarpal 30 Januar 2023
  1. Vorteile von timeit:
  2. Verwenden Sie das timeit-Modul, um die Ausführungszeit zweier Snippets zu vergleichen
  3. Verwendung von die Befehlszeilenschnittstelle des timeit-Moduls
Python Timeit

Das timeit-Modul ist eines der einfachsten und am leichtesten zu implementierenden Module unter allen Kategorie-Tools, die die Ausführung des Python-Codes profilieren. Das Tutorial behandelt die Verwendung und Implementierung des Moduls timeit in Python.

Python enthält eine eingebaute Bibliothek timeit, die die Ausführungszeit von winzigen Schnipseln des Python-Codes berechnen kann. Das Modul funktioniert, indem es den angegebenen Python-Code millionenfach ausführt und aus allen möglichen Ergebnissen die kürzeste Zeit vorhersagt, die während der Ausführung dieses Codes verstrichen ist.

Vorteile von timeit:

  • Bietet ein effizientes Ergebnis mit Präzision. Die Genauigkeit der durch diese Funktion wiedergegebenen Ausführungszeit ist einfach höher als bei Verwendung des einfachen time-Moduls.
  • Es führt das angegebene Code-Snippet über eine Million Mal aus, was viel relevantere Messwerte der während seiner Laufzeit verstrichenen Zeit bietet.
  • Es verfügt außerdem neben der generischen aufrufbaren Schnittstelle über eine zusätzliche Befehlszeilenschnittstelle, die leicht zu verstehen und anzuwenden ist.

Lassen Sie uns im Folgenden die Syntax der Funktion timeit() aus dem Modul timeit darstellen und uns darauf konzentrieren.

timeit.timeit(stmt, setup, timer, number)

Die Funktion timeit.timeit() nimmt vier Parameter auf, die alle zum besseren Verständnis der Funktion unten kurz erklärt wurden:

  • stmt: Wie der Name schon sagt, ist es die Aussage, die gemessen werden muss. Der Standardwert ist in diesem Fall pass.
  • setup: Bezeichnet den Code, der ausgeführt werden muss, bevor stmt angegangen wird. Wieder einmal hat es eine Voreinstellung als pass.
  • timer: Ein grundlegendes timeit.Timer-Objekt. Es ist bereits ein anständiger Standardwert zugewiesen, der normalerweise nicht geändert werden muss.
  • number: Gibt die Anzahl der Durchläufe des angegebenen Codeschnipsels an, die der Programmierer ausführen möchte.

Wir werden verschiedene Beispiele sehen, wie die Funktion timeit.timeit() aus dem Modul timeit implementiert werden kann.

Verwenden das timeit-Modul zur Berechnung der Ausführungszeit eines einfachen Code-Snippets

Diese Methode definiert ein Code-Snippet in einer Variablen zwischen dreifachen Anführungszeichen (''').

Der folgende Code verwendet das Modul timeit zur Berechnung der Ausführungszeit eines einfachen Codeschnipsels.

import timeit

setup1 = "from math import sqrt"
code1 = """
def a():
    list1 = []
    for i in range(50):
        list1.append(sqrt(i))
"""
print(timeit.timeit(setup=setup1, stmt=code1, number=10000))

Das obige Programm liefert die Ausgabe als Ausführungszeit in Sekunden. Diese Ausführungszeit ergibt sich aus einer Million Iterationen des gegebenen Codeschnipsels.

Wir sollten auch beachten, dass es gut ist, alle wesentlichen Importanweisungen in das Setup-Argument einzubeziehen.

Verwenden Sie das timeit-Modul, um die Ausführungszeit zweier Snippets zu vergleichen

Das Modul timeit kann auch verwendet werden, um die Ausführungszeit zweier vorgegebener Codeschnipsel zu vergleichen. Hier nehmen wir zwei Funktionen, die jeweils für Binäre Suche und Lineare Suche verwendet werden, und vergleichen ihre Ausführungszeiten.

Der folgende Code verwendet das Modul timeit, um die Ausführungszeit zweier Snippets zu vergleichen.

import timeit

# function for binary search


def b_s(mylist, find):
    while len(mylist) > 0:
        mid = (len(mylist)) // 2
        if mylist[mid] == find:
            return True
        elif mylist[mid] < find:
            mylist = mylist[:mid]
        else:
            mylist = mylist[mid + 1 :]
    return False


# function for linear search
def l_s(mylist, find):
    for x in mylist:
        if x == find:
            return True
    return False


def b_time():
    SETUP_CODE = """
from __main__ import b_s
from random import randint"""
    TEST_CODE = """
mylist = [x for x in range(10000)]
find = randint(0, len(mylist))
b_s(mylist, find)"""
    times = timeit.repeat(setup=SETUP_CODE, stmt=TEST_CODE, repeat=3, number=10000)
    print("Binary search time: {}".format(min(times)))


def l_time():
    SETUP_CODE = """
from __main__ import l_s
from random import randint"""
    TEST_CODE = """
mylist = [x for x in range(10000)]
find = randint(0, len(mylist))
l_s(mylist, find)
    """
    times = timeit.repeat(setup=SETUP_CODE, stmt=TEST_CODE, repeat=3, number=10000)
    print("Linear search time: {}".format(min(times)))


if __name__ == "__main__":
    l_time()
    b_time()

Verwendung von die Befehlszeilenschnittstelle des timeit-Moduls

Nehmen wir einen einfachen Funktionscode und seine Syntax in der Befehlszeilenschnittstelle und gehen alle Argumente einzeln an.

Der folgende Code verwendet die Befehlszeilenschnittstelle des timeit-Moduls.

C:\Windows\System32>python3 -m timeit -s "from math import sqrt" -n 10000 -r 5 'a = sqrt(34532)'

Hier haben wir die gleiche Funktion wie im ersten Beispiel des Artikels genommen.

Betrachten wir weiter alle Argumente, die hier in der Befehlszeilenschnittstelle verwendet werden.

  • timeit: Ein einfaches Positionsargument, das die Existenz und Verwendung des timeit-Moduls angibt.
  • -s: Das Setup-Argument.
  • -n: Das Zahlenargument.
  • -r: Das wiederholte Argument (optional).
  • 'code snippet': Der Code-Snippet wird direkt in einfache Anführungszeichen in die Befehlszeilenschnittstelle geschrieben.
Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn