kbr hat geschrieben: Montag 9. August 2021, 15:14
@YAPD: es gibt kein try ohne except. Der except branch wird aber nur ausgeführt, wenn ein KeyError auftritt. Wenn keiner auftritt, ist get teurer. Das wirst Du in der Praxis aber erst merken, wenn innerhalb kurzer Zeit extrem viele Zugriffe auf ein Dictionary erfolgen. Es zwar gut, performanten Code zu schreiben, aber noch wichtiger ist zu wissen, wann das wirklich erforderlich ist. Erster Ansatzpunkt ist hier in der Regel der Algorithmus und nicht Details wie try und get.
Wo wir gerade bei Performance sind, kannst du mir erklären warum ich bei Vergleich der Geschwindigkeit
folgender ( identischen ) Codes bei beiden Werten die gleiche Zeit erhalte :
Code: Alles auswählen
from collections import Counter
from collections import defaultdict
import time
from datetime import datetime
portfolio = [
('GOOG', 100, 490.1),
('IBM', 50, 91.1),
('CAT', 150, 83.44),
('IBM', 100, 45.23),
('GOOG', 75, 572.45),
('AA', 50, 23.15)
]
total_shares = Counter()
Shares = {}
for name, shares, price in portfolio:
total_shares[name] += shares
startTime = datetime.now()
def V1():
for rowno, row in enumerate(portfolio, start=0):
if row[0] in Shares:
Shares[row[0]].append((row[1], row[2]))
else:
Shares[row[0]] = [(row[1], row[2])]
cpu_time = time.process_time()
print("CPU / Processing Time : ", cpu_time)
print(datetime.now() - startTime)
def V2():
holdings = defaultdict(list)
for name, shares, price in portfolio:
holdings[name].append((shares, price))
cpu_time= time.process_time()
print("CPU / Processing Time : ", cpu_time)
print(datetime.now() - startTime)
Der Code in V1 macht exakt das selbe, nur ohne "defaultdict( )", natürlich weiß ich,
dass es besser "defaultdict( )" zu verwenden. Daher auch meine Frage. Warum sind
beide Codes gleich schnell, oder mache ich was falsch ?
Code: Alles auswählen
V1 : CPU / Processing Time : 0.046875
V1 : 0:00:00
V2 : CPU / Processing Time : 0.046875
V2 : 0:00:00
VG
YAPD