開始使用免費開始

使用 %lprun:修正效能瓶頸

在前一個練習中,你為 convert_units() 函式做了剖析,發現 new_hts 的列表生成式可能是效能瓶頸。你是否也注意到,new_wts 的列表生成式同樣佔了相近比例的執行時間?這表示你或許應該用不同的方法來建立 new_htsnew_wts

由於每位英雄的身高與體重都存放在 numpy 陣列中,你可以用陣列廣播(array broadcasting)而不是列表生成式來進行單位轉換。以下函式已經這樣實作:

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

請把 line_profiler 套件載入到你的 IPython 工作階段,接著使用 %lprun 來剖析套用在你的超級英雄資料上的 convert_units_broadcast()convert_units_broadcast() 函式、heroes 清單、hts 陣列與 wts 陣列都已載入到你的工作階段。完成程式碼後,回答下列問題:

convert_units_broadcast() 函式的總執行時間中,花在 new_hts 陣列廣播那一行程式碼的時間比例是多少?

本練習屬於課程

撰寫高效的 Python 程式碼

檢視課程

動手互動練習

將理論付諸實踐,立即體驗我們的互動練習

開始練習