Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

Verwenden von Python Timeit zum Timen Ihres Codes

Verwenden von Python-Timeit-to-Time-Your-Code
Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

In diesem Tutorial erfahren Sie, wie Sie die timeit-Funktion aus dem timeit-Modul von Python verwenden. Sie lernen, wie Sie einfache Ausdrücke und Funktionen in Python timen.

Das Timing Ihres Codes kann Ihnen dabei helfen, eine Schätzung der Ausführungszeit eines Codeabschnitts zu erhalten und auch die Abschnitte des Codes zu identifizieren, die optimiert werden müssen.

Wir beginnen damit, die Syntax von Python zu lernen timeit Funktion. Und dann werden wir Beispiele codieren, um zu verstehen, wie Sie es verwenden können, um Codeblöcke und Funktionen in Ihrem Python-Modul zu timen. Lass uns anfangen.

How to Use the Python timeit Function

Dieses timeit Das Modul ist Teil der Python-Standardbibliothek und Sie können es importieren:

import timeit

Die zu verwendende Syntax timeit Funktion von der timeit Modul ist wie unten gezeigt:

timeit.timeit(stmt, setup, number)

Hier:

  • stmt ist das Stück Code, dessen Ausführungszeit gemessen werden soll. Sie können es als einfache Python-Zeichenfolge oder als mehrzeilige Zeichenfolge angeben oder den Namen des aufrufbaren Elements übergeben.
  • Wie der Name andeutet, setup bezeichnet den Codeabschnitt, der nur einmal ausgeführt werden muss, häufig als Voraussetzung für die stmt laufen. Angenommen, Sie berechnen die Ausführungszeit für die Erstellung eines NumPy-Arrays. In diesem Fall importieren numpy ist setup Code und die eigentliche Erstellung ist die Anweisung, die zeitlich festgelegt werden soll.
  • Der Parameter number bezeichnet die Anzahl der Male stmt es läuft. Der Standardwert von number ist 1 Million (1000000), aber Sie können diesen Parameter auch auf jeden anderen Wert Ihrer Wahl setzen.

Nun, da wir die Syntax zur Verwendung von gelernt haben timeit() Funktion, fangen wir an, einige Beispiele zu codieren.

Timing Simple Python Expressions

Timing-Simple-Python-Ausdrücke

In diesem Abschnitt versuchen wir, die Ausführungszeit einfacher Python-Ausdrücke mit timeit zu messen.

Starten Sie eine Python REPL und führen Sie die folgenden Codebeispiele aus. Hier berechnen wir die Ausführungszeit der Potenzierung und Bodenaufteilung Operationen für 10000 und 100000 Läufe.

Beachten Sie, dass wir die zu timende Anweisung als Python-String übergeben und ein Semikolon verwenden, um die verschiedenen Ausdrücke in der Anweisung zu trennen.

>>> import timeit
>>> timeit.timeit('3**4;3//4',number=10000)
0.0004020999999738706

>>> timeit.timeit('3**4;3//4',number=100000)
0.0013780000000451764

Ausführen von Python timeit in der Befehlszeile

Sie können auch timeit auf der Kommandozeile. Hier ist das Befehlszeilenäquivalent des timeit-Funktionsaufrufs:

$ python-m timeit -n [number] -s [setup] [stmt]
  • python -m timeit stellt dar, dass wir laufen timeit als Hauptmodul.
  • n ist eine Befehlszeilenoption, die angibt, wie oft der Code ausgeführt werden soll. Dies entspricht der number Argument in der timeit() Funktionsaufruf.
  • Sie können die Option verwenden -s um den Setup-Code zu definieren.

Hier schreiben wir das vorherige Beispiel mit dem Befehlszeilenäquivalent um:

$ python -m timeit -n 100000 '3**4;3//4'
100000 loops, best of 5: 35.8 nsec per loop

In diesem Beispiel berechnen wir die Ausführungszeit des eingebauten len() Funktion. Die Initialisierung der Zeichenfolge ist der Setup-Code, der mit übergeben wird s .

$ python -m timeit -n 100000 -s "string_1 = 'coding'" 'len(string_1)'
100000 loops, best of 5: 239 nsec per loop

Beachten Sie in der Ausgabe, dass wir die Ausführungszeit für erhalten Das Beste von 5 läuft. Was bedeutet das? Wenn du rennst timeit in der Befehlszeile, die repeat Option r wird auf die eingestellte Standard Wert von 5. Dies bedeutet die Ausführung der stmt für die angegebenen number von Zeiten wird fünfmal wiederholt, und die beste der Ausführungszeiten wird zurückgegeben.

Analysis of String Reversal Methods Using timeit

Bei der Arbeit mit Python-Strings, möchten Sie sie möglicherweise umkehren. Die beiden gängigsten Ansätze zur Umkehrung von Zeichenfolgen sind wie folgt:

  • Verwenden von String-Slicing
  • Verwendung der reversed() Funktion und die join() Methode
Analyse-von-String-Reversal-Methods-Using-timeit

Umgekehrte Python-Strings mit String Slicing

Sehen wir uns an, wie String Slicing funktioniert und wie Sie damit einen Python-String umkehren können. Verwendung der Syntax some-string[start:stop] gibt ein Stück der Zeichenfolge zurück, beginnend beim Index start und erstreckt sich bis zum Index stop-1. Nehmen wir ein Beispiel.

Betrachten Sie die folgende Zeichenfolge „Python“. Der String hat die Länge 6 und die Liste der Indizes ist 0, 1, 2 bis 5.

Bild-76
>>> string_1 = 'Python'

Wenn Sie beide angeben start und stop Werten erhalten Sie einen String-Slice, der sich von erstreckt start zu stop-1. Deshalb string_1[1:4] gibt 'yth' zurück.

Bild-77
>>> string_1 = 'Python'
>>> string_1[1:4]
'yth'

Wenn Sie die nicht angeben start Wert, der Standardwert start Der Wert null wird verwendet, und der Slice beginnt beim Index null und erstreckt sich bis zu stop - 1.

Bild-78

Hier, die stop Der Wert ist 3, also beginnt der Slice bei Index 0 und geht bis Index 2.

>>> string_1[:3]
'Pyt'

Wenn Sie die nicht einschließen stop index sehen Sie, dass der Slice mit dem beginnt start Index (1) und reicht bis zum Ende des Strings.

Bild-80
>>> string_1[1:]
'ython'

Ignorieren sowohl die start und stop values ​​gibt einen Teil des gesamten Strings zurück.

Bild-81
>>> string_1[::]
'Python'

Lassen Sie uns ein Slice mit dem erstellen step Wert. Stellen Sie die ein start, stop und step Werte auf 1, 5 bzw. 2. Wir erhalten ein Stück der Zeichenfolge, das bei 1 beginnt und sich bis zu 4 (ohne den Endpunkt 5) erstreckt jedes zweite Zeichen.

Bild-82
>>> string_1[1:5:2]
'yh'

Wenn Sie einen negativen Schritt verwenden, können Sie einen Slice beginnend am Ende der Zeichenfolge erhalten. Wenn der Schritt auf -2 eingestellt ist, string_1[5:2:-2] ergibt folgende Scheibe:

Bild-83
>>> string_1[5:2:-2]
'nh'

Um also eine umgekehrte Kopie der Zeichenfolge zu erhalten, überspringen wir die start und stop Werte und setzen Sie den Schritt wie gezeigt auf -1:

>>> string_1[::-1]
'nohtyP'

Zusammengefasst: string[::-1] gibt eine umgekehrte Kopie der Zeichenfolge zurück.

Umkehren von Zeichenfolgen mit integrierten Funktionen und Zeichenfolgenmethoden

Die integrierte reversed() Die Funktion in Python gibt einen umgekehrten Iterator über die Elemente der Zeichenfolge zurück.

>>> string_1 = 'Python'
>>> reversed(string_1)
<reversed object at 0x00BEAF70>

Sie können also den umgekehrten Iterator mit a durchlaufen for-Schleife:

for char in reversed(string_1):
    print(char)

Greifen Sie in umgekehrter Reihenfolge auf die Elemente der Zeichenfolge zu.

# Output
n
o
h
t
y
P

Als nächstes kannst du dann die anrufen join() Methode auf dem Reverse Iterator mit der Syntax: <sep>.join(reversed(some-string)).

Das folgende Code-Snippet zeigt einige Beispiele, bei denen das Trennzeichen ein Bindestrich bzw. ein Leerzeichen ist.

>>> '-'.join(reversed(string1))
'n-o-h-t-y-P'
>>> ' '.join(reversed(string1))
'n o h t y P'

Hier wollen wir kein Trennzeichen; Setzen Sie also das Trennzeichen auf eine leere Zeichenfolge, um eine umgekehrte Kopie der Zeichenfolge zu erhalten:

>>> ''.join(reversed(string1))
'nohtyP'

Die ''.join(reversed(some-string)) gibt eine umgekehrte Kopie der Zeichenfolge zurück.

Ausführungszeiten vergleichen mit timeit

Bisher haben wir zwei Ansätze kennengelernt, um Python-Strings umzukehren. Aber wer von ihnen ist schneller? Lass es uns herausfinden.

In einem vorherigen Beispiel, in dem wir einfache Python-Ausdrücke zeitlich festgelegt haben, hatten wir keine setup Code. Hier kehren wir den Python-String um. Während die Zeichenfolgenumkehroperation so oft ausgeführt wird, wie durch angegeben number, der setup code ist die Initialisierung der Zeichenfolge, die nur einmal ausgeführt wird.

>>> import timeit
>>> timeit.timeit(stmt = 'string_1[::-1]', setup = "string_1 = 'Python'", number = 100000)
0.04951830000001678
>>> timeit.timeit(stmt = "''.join(reversed(string_1))", setup = "string_1 = 'Python'", number = 100000)
0.12858760000000302

Für die gleiche Anzahl von Läufen zum Umkehren der gegebenen Zeichenfolge wird die Saitenschneiden Ansatz ist schneller als die Verwendung von join() Methode und reversed() Funktion.

Timing Python Functions Using timeit

Timing-Python-Funktionen-Using-timeit

In diesem Abschnitt erfahren Sie, wie Sie Python-Funktionen mit der Funktion timeit timen. Bei einer gegebenen Liste von Zeichenfolgen wird die folgende Funktion hasDigit gibt die Liste der Zeichenfolgen zurück, die mindestens eine Ziffer haben.

def hasDigit(somelist):
     str_with_digit = []
     for string in somelist:
         check_char = [char.isdigit() for char in string]
         if any(check_char):
            str_with_digit.append(string)
     return str_with_digit

Nun möchten wir die Ausführungszeit dieser Python-Funktion messen hasDigit() Verwendung von timeit.

Identifizieren wir zunächst die zeitgesteuerte Anweisung (stmt). Es ist der Aufruf der Funktion hasDigit() mit einer Liste von Strings als Argument. Als nächstes definieren wir die Setup Code. Können Sie erraten, was die setup Code sollte sein?

Damit der Funktionsaufruf erfolgreich ausgeführt wird, sollte der Einrichtungscode Folgendes enthalten:

  • Die Definition der Funktion hasDigit()
  • Die Initialisierung der Argumentliste von Zeichenfolgen

Lassen Sie uns den Setup-Code in der definieren setup Zeichenfolge, wie unten gezeigt:

setup = """
def hasDigit(somelist):
    str_with_digit = []
    for string in somelist:
      check_char = [char.isdigit() for char in string]
      if any(check_char):
        str_with_digit.append(string)
    return str_with_digit
thislist=['puffin3','7frost','blue']
     """

Als nächstes können wir die verwenden timeit Funktion und erhalten Sie die Ausführungszeit der hasDigit() Funktion für 100000 Läufe.

import timeit
timeit.timeit('hasDigit(thislist)',setup=setup,number=100000)
# Output
0.2810094920000097

Fazit

Sie haben gelernt, wie man es benutzt Pythons timeit-Funktion zu Zeitausdrücken, Funktionen und anderen Callables. Dies kann Ihnen helfen, Ihren Code zu bewerten, die Ausführungszeiten verschiedener Implementierungen derselben Funktion zu vergleichen und vieles mehr.

Sehen wir uns an, was wir in diesem Tutorial gelernt haben. Du kannst den ... benutzen timeit() Funktion mit der Syntax timeit.timeit(stmt=...,setup=...,number=...). Alternativ können Sie timeit in der Befehlszeile ausführen, um kurze Codeschnipsel zu timen.

Als nächsten Schritt können Sie erkunden, wie Sie andere Python-Profilerstellungspakete wie verwenden Line-Profiler und memprofiler um Ihren Code für Zeit bzw. Speicher zu profilieren.

Als nächstes lernen Sie, wie Zeitunterschied in Python berechnen.

Danke an unsere Sponsoren
Weitere großartige Lektüre zum Thema Entwicklung
Treiben Sie Ihr Geschäft an
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder