1. Learn
  2. /
  3. Cursuri
  4. /
  5. Scriere eficientă a codului Python

Connected

exercițiu

Folosirea %lprun: rezolvă blocajul

În exercițiul anterior, ai profilat funcția convert_units() și ai observat că list comprehension-ul pentru new_hts ar putea fi un potențial blocaj. Ai remarcat că list comprehension-ul pentru new_wts a contribuit cu un procent similar din timpul de execuție? Acesta este un indiciu că ar fi util să creezi obiectele new_hts și new_wts folosind o altă tehnică.

Deoarece înălțimea și greutatea fiecărui erou sunt stocate într-un array numpy, poți folosi broadcasting pe array-uri în loc de list comprehension pentru a converti înălțimile și greutățile. Această abordare a fost implementată în funcția de mai jos:

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

Încarcă pachetul line_profiler în sesiunea ta IPython. Apoi, folosește %lprun pentru a profila funcția convert_units_broadcast() aplicată pe datele supererouilor tăi. Funcția convert_units_broadcast(), lista heroes, array-ul hts și array-ul wts au fost deja încărcate în sesiune. După ce ai terminat de scris codul, răspunde la următoarea întrebare:

Ce procent din timp este alocat liniei de cod cu broadcasting pentru array-ul new_hts, raportat la timpul total petrecut în funcția convert_units_broadcast()?

Instrucțiuni

50 XP

Răspunsuri posibile