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

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

WBOY
WBOYOriginal
2016-12-05 13:27:161401Durchsuche

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)

läuft wie folgt:

In [4]: run()
运行花费时间:2.383398s。
Out[4]: 5000000
(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()

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.

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