Funktion - Unpythonisch?

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
xpilz
User
Beiträge: 76
Registriert: Sonntag 11. April 2010, 12:46
Wohnort: Deutschland
Kontaktdaten:

Hallo ich will für meinen Blog gerne eine Funktion veröffentlichen der angibt wie lange eine beliebige Funktion zum durchlaufen braucht.
Den Code habe ich und er funktioniert auch, nur da ich öfters gehört habe das mein Tutorial das ich lese unpythonisch ist, wollte ich fragen ob das bei meiner Funktion auch so ist.
http://paste.pocoo.org/show/211351/

Ps.: Leider kann ich keine Funktionen mit Parametern messen lassen. Aber das ist nebensächlich.

mfg xpilz
BlackJack

@xpilz: Arbeite mal im offiziellen Tutorial den Abschnitt More On Defining Functions und die folgenden über Argumente durch. Dann solltest Du der zu testenden Funktion auch Argumente mitgeben können.

Die Doku vom `time`-Modul warnt davor `time()` oder `clock()` einfach so zum messen von Zeit zu verwenden denn die Auflösung dieser Funktionen ist vom verwendeten Betriebssystem abhängig.

Praktischer wäre eine Funktion, welche die zu messende Funktion entgegennimmt und eine Funktion zurückliefert, die alle Argumente an diese Funktion übergibt und die Zeit misst. Darin könnte man dann beliebige Funktion bzw. aufrufbare Objekte verpacken und das dann ganz normal in Programmen verwenden.
Benutzeravatar
xpilz
User
Beiträge: 76
Registriert: Sonntag 11. April 2010, 12:46
Wohnort: Deutschland
Kontaktdaten:

@BlackJack: Dankeschön. Ja, man hat mir auch schon des öfteren geraten mich mit dem offiziellen Tutorial zu beschäftigen.. Das Thema werde ich mir mal vornehmen und nach meinem jetzigen Tut, das offizielle komplett durcharbeiten.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Funktionen sind prima. Klassen manchmal auch.

Hier ein paar Beispiele:

Code: Alles auswählen

import time

def to_time(a):
    sum = 0
    for i in range(20000):
        sum += a
    return sum

def timeit(func, *args, **kwargs):
  t = time.clock()
  try: return func(*args, **kwargs)
  finally: print("t=%s" % (time.clock() - t))

print(timeit(to_time, 1))

class timing:
    def __enter__(self):
        self.t = time.clock()
    
    def __exit__(self, *args):
        print("t=%s" % (time.clock() - self.t))

with timing():
    print(to_time(2))

def timed(f):
    def inner(*args, **kwargs):
        t = time.clock()
        try: return f(*args, **kwargs)
        finally: print("t=%s" % (time.clock() - t))
    return inner

# eigentlich so:
# @timed
# def to_time(a):
#   ...
to_time = timed(to_time)
print(to_time(3))
Stefan
Antworten