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 diestmt
laufen. Angenommen, Sie berechnen die Ausführungszeit für die Erstellung eines NumPy-Arrays. In diesem Fall importierennumpy
istsetup
Code und die eigentliche Erstellung ist die Anweisung, die zeitlich festgelegt werden soll. - Der Parameter
number
bezeichnet die Anzahl der Malestmt
es läuft. Der Standardwert vonnumber
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

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 laufentimeit
als Hauptmodul.n
ist eine Befehlszeilenoption, die angibt, wie oft der Code ausgeführt werden soll. Dies entspricht dernumber
Argument in dertimeit()
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 diejoin()
Methode

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.

>>> 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.

>>> 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
.

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.

>>> string_1[1:]
'ython'
Ignorieren sowohl die start
und stop
values gibt einen Teil des gesamten Strings zurück.

>>> 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.

>>> 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:

>>> 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

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.