MulaiMulai sekarang secara gratis

Mengukur overhead dekorator

Atasan Anda menulis sebuah dekorator bernama check_everything() yang menurutnya luar biasa, dan ia bersikeras agar Anda menggunakannya pada fungsi Anda. Namun, Anda menyadari bahwa ketika Anda menggunakannya untuk mendekorasi fungsi Anda, fungsi tersebut berjalan jauh lebih lambat. Anda perlu meyakinkan atasan bahwa dekorator tersebut menambah waktu pemrosesan yang terlalu besar pada fungsi Anda. Untuk itu, Anda akan mengukur berapa lama fungsi yang didekorasi berjalan dan membandingkannya dengan berapa lama fungsi tanpa dekorasi akan berjalan. Berikut dekorator yang dimaksud:

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

Latihan ini adalah bagian dari kursus

Menulis Function di Python

Lihat Kursus

Petunjuk latihan

  • Panggil fungsi asli alih-alih versi yang didekorasi dengan menggunakan sebuah atribut dari fungsi yang ditambahkan oleh pernyataan wraps() dalam dekorator atasan Anda ke fungsi yang didekorasi.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

@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))
Edit dan Jalankan Kode