Mulai sekarangMulai 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 merupakan bagian dari kursus

Menulis Function di Python

Lihat Kursus

Instruksi 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 langsung praktik

Cobalah latihan ini dengan melengkapi kode contoh ini.

@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