Vindstille Skrevet 13. august 2007 Skrevet 13. august 2007 Har en funksjon for å beregne tiden det tar får en gitt handling å utføres. import time def runtime(execute): global time start = time.time() exec(execute) stop = time.time() t = stop - start #return (time.seconds*1000)+time.microseconds return t*1000 Problemet er oppstår når jeg prøver å kjøre funksjonen med en execute-string som inneholder objecter som ikke finnes inni funksjonen. >>Poll.objects.all()Funksjon funker helt fint og spytter ut output >>import runtime >>runtime.runtime( "Poll.objects.all()" ) Traceback (most recent call last): File "<console>", line 1, in <module> File "C:\Python25\runtime.py", line 7, in runtime exec(execute) File "<string>", line 1, in <module> NameError: name 'Poll' is not defined Siden det ikke er gitt at det er Poll-objectet som skal brukes er det umulig å bruke global for å importere objectet til funksjonen. Er det derfor noen som vet om en måte jeg kan omgå dette problemet på?
steingrim Skrevet 14. august 2007 Skrevet 14. august 2007 (endret) I stedet for å bruke en string for å representere det du skal kjøre bør du sende noe som er kallbart (typisk en funksjon). Når man først er i støtet kan man også tillate argumenter: def runtime(func, *args): if not callable(func): raise TypeError('func is not callable') # kall func med argumenter slik func(*args) def test_func(a, b, c): print (a + b + c) Her tar altså runtime() et kallbart objekt og et vilkårlig antall argumenter som er argumentene til det den skal kalle. >>> runtime(test_func, 1, 2, 3) 6 Mer pythonsk, tryggere, penere og bedre IMHO. Endret 14. august 2007 av steingrim
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå