mkesper hat geschrieben:Verwende das, was mehr Sinn macht. Wenn du das Gefühl hast, OO ist an der Stelle geeigneter, dann verwende es. Das ist viel wichtiger.
Ich möchte Dir nicht ganz Unrecht geben, allerdings hoffe ich, dass eines Tages nicht nur ich, sondern auch andere meinen Kalender verwenden. Und denen ist es ziemlich egal, welches Gefühl ich beim Programmieren hatte. Die erwarten ein Programm, das sich für sie gut anfühlt. Und da spielt Performance eine gewichtige Rolle. Auch wenn das oft nicht wirklich messbar ist, die so oft zitierte 'gefühlte' Geschwindigkeit lässt sich nicht ignorieren.
Wie versprochen (und das wird auch nicht gebrochen...

) schicke ich hier noch meine kleine Testroutine. Ich hoffe, ich habe keinen elementaren Fehler begangen. Wenn doch, dann wär' ich für einen 'Schrei der Entrüstung' wie immer sehr dankbar:
Code: Alles auswählen
import time
class test():
def __init__(self, count):
self.dict = {}
for i in range(count):
self.dict[i] = i
def get(self, i):
return self.dict[i]
def start(loop=100, count=10000):
instanz = test(count)
get = ins = dic = lis = 0
for i in range(loop):
dict = {}
list = []
#Get-Abfrage
t = time.time()
for i in range(count):
dummy = instanz.get(i)
get += time.time() - t
#Instanz-Abfrage
t = time.time()
for i in range(count):
dummy = instanz.dict[i]
ins += time.time() - t
#Dictionary-Abfrage
for i in range(count):
list.append(i)
dict[i] = i
t = time.time()
for i in range(count):
dummy = dict[i]
dic += time.time() - t
#List-Abfrage
t = time.time()
for i in range(count):
dummy = list[i]
lis += time.time() - t
#Auswertung
champ = [(get/loop,'(Get)'), (ins/loop,'(Instanz)'),
(dic/loop,'(Dictionary)'), (lis/loop,'(Liste)')]
champ.sort()
print('%i x %i Abfragen ergeben durchschnittlich:'
% (loop,count))
for i in champ:
print(str(i[0])+' '+i[1])
Nun ja, zumindest auf meinem nicht wirklich flotten Samsung X20 sind Get-Methoden ab einer bestimmten Menge nicht mehr ganz so dolle...
Gruß
mutetella