LoslegenKostenlos loslegen

%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

Kurs anzeigen

Interaktive Übung

In dieser interaktiven Übung kannst du die Theorie in die Praxis umsetzen.

Übung starten