%lprun verwenden: den Engpass beheben
In der vorherigen Übung hast du ein Profil der Funktion convert_units()
erstellt und gesehen, dass das Listenverständnis von new_hts
ein potenzieller Engpass sein könnte. Ist dir aufgefallen, dass auch das Listenverständnis von new_wts
einen ähnlichen Prozentsatz der Laufzeit beansprucht? Das ist ein Hinweis darauf, dass du die Objekte new_hts
und new_wts
vielleicht mit einer anderen Technik erstellen solltest.
Da die Größe und das Gewicht jedes Helden in einem numpy
Array gespeichert sind, kannst du Array Broadcasting statt List Comprehension verwenden, um die Größen und Gewichte zu konvertieren. Dies wurde in der folgenden Funktion umgesetzt:
def convert_units_broadcast(heroes, heights, weights):
# Array broadcasting instead of list comprehension
new_hts = heights * 0.39370
new_wts = weights * 2.20462
hero_data = {}
for i,hero in enumerate(heroes):
hero_data[hero] = (new_hts[i], new_wts[i])
return hero_data
Lade das Paket line_profiler
in deine IPython-Sitzung. Verwende dann %lprun
, um ein Profil der Funktion convert_units_broadcast()
zu erstellen, die auf die Daten deiner Superhelden wirkt. Die Funktion convert_units_broadcast()
, die Liste heroes
, das Array hts
und das Array wts
wurden in deine Sitzung geladen. Wenn du mit dem Codieren fertig bist, beantworte die folgende Frage:
Wie viel Prozent der Zeit wird für die Codezeile new_hts
array broadcasting aufgewendet, bezogen auf die Gesamtzeit für die Funktion convert_units_broadcast()
?
Diese Übung ist Teil des Kurses
Effizienten Python-Code schreiben
Interaktive Übung
In dieser interaktiven Übung kannst du die Theorie in die Praxis umsetzen.
