Bắt đầu ngayBắt đầu miễn phí

Đo chi phí phụ trội của decorator

Sếp của bạn đã viết một decorator tên là check_everything() mà họ nghĩ là tuyệt vời và yêu cầu bạn dùng nó cho hàm của mình. Tuy nhiên, bạn nhận thấy khi dùng decorator này, các hàm chạy chậm đi rất nhiều. Bạn cần thuyết phục sếp rằng decorator đang thêm quá nhiều thời gian xử lý vào hàm. Để làm điều đó, bạn sẽ đo thời gian chạy của hàm đã được trang trí và so sánh với thời gian mà hàm chưa trang trí sẽ mất. Đây là decorator đang được nói đến:

def check_everything(func):
  @wraps(func)
  def wrapper(*args, **kwargs):
    check_inputs(*args, **kwargs)
    result = func(*args, **kwargs)
    check_outputs(result)
    return result
  return wrapper

Bài tập này là một phần của khóa học

Viết hàm trong Python

Xem khóa học

Hướng dẫn bài tập

  • Gọi hàm gốc thay vì phiên bản đã được trang trí bằng cách sử dụng một thuộc tính của hàm mà câu lệnh wraps() trong decorator của sếp bạn đã thêm vào hàm đã được trang trí.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

@check_everything
def duplicate(my_list):
  """Return a new list that repeats the input twice"""
  return my_list + my_list

t_start = time.time()
duplicated_list = duplicate(list(range(50)))
t_end = time.time()
decorated_time = t_end - t_start

t_start = time.time()
# Call the original function instead of the decorated one
duplicated_list = duplicate.____(list(range(50)))
t_end = time.time()
undecorated_time = t_end - t_start

print('Decorated time: {:.5f}s'.format(decorated_time))
print('Undecorated time: {:.5f}s'.format(undecorated_time))
Chỉnh sửa và Chạy Mã