1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Viết mã Python hiệu quả

Connected

Bài tập

Dùng %lprun: sửa điểm nghẽn

Trong bài tập trước, bạn đã profiling hàm convert_units() và thấy rằng list comprehension new_hts có thể là một điểm nghẽn. Bạn có để ý rằng list comprehension new_wts cũng chiếm tỷ lệ thời gian chạy tương tự không? Điều này cho thấy bạn nên tạo các đối tượng new_hts và new_wts bằng một kỹ thuật khác.

Vì chiều cao và cân nặng của mỗi hero được lưu trong mảng numpy, bạn có thể dùng broadcasting mảng thay vì list comprehension để chuyển đổi chiều cao và cân nặng. Cách này đã được triển khai trong hàm dưới đây:

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

Tải gói line_profiler vào phiên IPython của bạn. Sau đó, dùng %lprun để profiling hàm convert_units_broadcast() chạy trên dữ liệu siêu anh hùng của bạn. Hàm convert_units_broadcast(), danh sách heroes, mảng hts và mảng wts đã được nạp sẵn vào phiên của bạn. Sau khi viết mã xong, hãy trả lời câu hỏi sau:

Tỷ lệ phần trăm thời gian dành cho dòng mã broadcasting mảng new_hts so với tổng thời gian trong hàm convert_units_broadcast() là bao nhiêu?

Hướng dẫn

50 XP

Các phương án trả lời