Vindstille Skrevet 13. august 2007 Rapporter Del 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å? Lenke til kommentar
steingrim Skrevet 14. august 2007 Rapporter Del 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 Lenke til kommentar
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å