1. Učit se
  2. /
  3. Kurzy
  4. /
  5. Psaní efektivního kódu v Pythonu

Connected

Cvičení

Použití %lprun: odstraňování úzkých míst

V předchozím cvičení jsi profiloval/a funkci convert_units() a zjistil/a, že list comprehension pro new_hts může být potenciálním úzkým místem. Všiml/a sis, že list comprehension pro new_wts zabíral podobné procento celkového času? To naznačuje, že by stálo za to vytvořit objekty new_hts a new_wts jiným způsobem.

Protože výška a váha každého hrdiny je uložena v poli numpy, můžeš místo list comprehension použít array broadcasting. Tato úprava je implementována v následující funkci:

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

Načti balíček line_profiler do své IPython session. Pak pomocí %lprun profiluj funkci convert_units_broadcast() na datech svých superhrdinů. Funkce convert_units_broadcast(), seznam heroes, pole hts a pole wts jsou do session již načteny. Až budeš hotov/a s kódem, odpověz na následující otázku:

Kolik procent času zabírá řádek s array broadcasting pro new_hts z celkového času stráveného ve funkci convert_units_broadcast()?

Pokyny

50 XP

Možné odpovědi