LoslegenKostenlos loslegen

Engpässe mit %lprun beheben

In der letzten Übung hast du die Funktion convert_units() analysiert und gesehen, dass die Listenabstraktion new_hts ein möglicher Engpass sein könnte. Hast du bemerkt, dass die Listenabstraktion new_wts auch einen ähnlichen Anteil an der Laufzeit hatte? 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 anstelle von Listenabstraktion verwenden, um Größe und Gewicht der Helden umzuwandeln. Das 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-Session. Nutze anschließend %lprun, um die Funktion convert_units_broadcast(), die auf deine Superhelden-Daten angewendet wird, zu analysieren. Die Funktion convert_units_broadcast(), die Liste heroes, und die Arrays hts und wts wurden in deine Session geladen. Wenn du mit dem Programmieren fertig bist, beantworte bitte die folgende Frage:

Wie viel Prozent der Zeit wird vom Code new_hts im Vergleich zur Gesamtzeit verbraucht, die für die Funktion convert_units_broadcast() benötigt wird?

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