So fügen Sie zusätzliches Verhalten vor und nach der Ausführung einer Python-Funktion hinzu

WBOY
Freigeben: 2016-12-05 13:27:16
Original
1435 Leute haben es durchsucht

Schauen wir uns zunächst ein kleines Programm an. Dies ist ein Programm, das die aufgewendete Zeit misst. Im Folgenden finden Sie Beispiele für frühere Lösungen

from functools import wraps, partial
from time import time

def timing(func=None, frequencies=1):
 if func is None:
  # print("+None")
  return partial(timing, frequencies=frequencies)
 # else:
  # print("-None")

 @wraps(func)
 def _wrapper(*args, **kwargs):
  start_time = time()
  for t in range(frequencies):
   result = func(*args, **kwargs)
  end_time = time()
  print('运行花费时间:{:.6f}s。'.format(end_time-start_time))
  return result

 return _wrapper


@timing
def run():
 l = []
 for i in range(5000000):
  l.extend([i])
 return len(l)
Nach dem Login kopieren

läuft wie folgt:

In [4]: run()
运行花费时间:2.383398s。
Out[4]: 5000000
Nach dem Login kopieren

(Wenn Sie tiefer nachfragen möchten, können Sie die Kommentare entfernen und darüber nachdenken, welche Art von Ausgabe erwartet wird.)

Heute habe ich zufällig den Kontextmanager von Python (

) gesehen und fand ihn sehr gut. Tatsächlich hängt er eng mit der Context Manager-Anweisung zusammen und war mir noch nie zuvor aufgefallen. with

from time import time

def run2():
 l = []
 for i in range(5000000):
  l.extend([i])
 return len(l)

class ElapsedTime():
 def __enter__(self):
  self.start_time = time()
  return self

 def __exit__(self, exception_type, exception_value, traceback):
  self.end_time = time()
  print('运行花费时间:{:.6f}s。'.format(self.end_time - self.start_time))

with ElapsedTime():
 run2()
Nach dem Login kopieren

Zusammenfassung

Nach einem kurzen Blick auf die offizielle Dokumentation ist die Kontextverwaltung immer noch etwas kompliziert. Python hat sich bis heute weiterentwickelt und ist eigentlich nicht mehr einfach. Um es einfach auszudrücken: Sie gehen einfach nicht mit der Zeit und beherrschen nur die altmodische Dreiaxt. Daher muss das Wissen ständig aktualisiert werden, um Ihre blinden Flecken auszugleichen. Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er kann jedem beim Lernen oder Arbeiten helfen.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!