Was ist schneller? getter oder dictionary-Abfrage?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
lunar

@mutuella: Das habe ich jetzt nicht verstanden. Was bedeutet "innerhalb" eines Programms? Wieso musst Du das "wieder selbst importieren"?

Kann es sein, dass Du nicht verstanden hast, wie timeit anzuwenden ist?
BlackJack

Innerhalb eines Programms ist IMHO Profiling sowieso die bessere Lösung. Da kann man sich dann auch die Zeit auf die einzelnen Funktionen/Aufrufe runterbrechen lassen und weiss dann nicht nur wie lange es gebraucht hat, sondern auch *wo* es wie lange gebraucht hat.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

lunar hat geschrieben:Kann es sein, dass Du nicht verstanden hast, wie timeit anzuwenden ist?
Das kann nicht sein. Das ist so... :D
Wenn ich z. B. innerhalb von 'test.py' die Funktion

Code: Alles auswählen

def hallo(anzahl):
    for i in range(anzahl):
        print('Voelliger Quatsch')
messen möchte, dann muss ich doch timeit() folgendermaßen verwenden:

Code: Alles auswählen

import timeit

def hallo(anzahl):
    for i in range(anzahl):
        print('Voelliger Quatsch')

timer = timeit.Timer('hallo(100)', 'import test')
print(timer.timeit(number=1)
Bei mir verursacht das immer nur ein 'global name hallo is not defined', ich könnte schreien....

Auch der Beispielcode aus der timeit()-Doku funktioniert nicht:

Code: Alles auswählen

def test():
    "Stupid test function"
    L = []
    for i in range(100):
        L.append(i)

if __name__=='__main__':
    from timeit import Timer
    t = Timer("test()", "from __main__ import test")
    print t.timeit()
Gruß
mutetella
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Was heißt denn funktioniert nicht? Bei mir geht der gezeigte code aus der doku.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ok, ich geh' Schafe hüten....

Zeile 7 muss natürlich lauten:

timer = timeit.Timer('hallo(100)', 'from test import hallo')

Oder dann eben 'from __main__' oder woher auch immer... :-)

Voll peinlich.... :oops:

Gruß
mutetella
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Wenn man allerdings der zu messenden Funktion 'hallo()' einen Parameter übergeben möchte, wird die Syntax schon ein bischen abenteuerlich:

count = 10000
timer = timeit.Timer('hallo('+str(count)+')', 'from test import hallo')

Oder gibt's da 'ne schönere Lösung?

Gruß
mutetella

@BlackJack:
Werd' mich jetzt auch mal mit profile beschäftigen, wenn ich timeit() kapiert hab'.... :-)
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Code: Alles auswählen

count = 10000
timer = timeit.Timer('hallo(%s)'%count, 'from test import hallo') 
the more they change the more they stay the same
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Dav1d:
Ok, schaut definitiv besser aus... :lol:
Antworten