BaşlayınÜcretsiz Başlayın

Decorator ek yükünü ölçme

Patronun, harika olduğunu düşündüğü check_everything() adlı bir decorator yazdı ve fonksiyonunda bunu kullanmanda ısrar ediyor. Ancak, bunu fonksiyonlarını süslemek için kullandığında, onların çok daha yavaş çalıştığını fark ettin. Decorator'ün fonksiyonuna gereğinden fazla işlem süresi eklediğine patronunu ikna etmen gerekiyor. Bunu yapmak için, süslenmiş (decorated) fonksiyonun çalışmasının ne kadar sürdüğünü ölçecek ve süslenmemiş (undecorated) fonksiyonun ne kadar sürede çalışacağıyla karşılaştıracaksın. Söz konusu decorator şu:

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

Bu egzersiz

Python'da Fonksiyon Yazımı

kursunun bir parçasıdır
Kursu Görüntüle

Egzersiz talimatları

  • Patronunun decorator'ündeki wraps() ifadesinin süslenmiş fonksiyona eklediği bir özniteliği kullanarak, süslenmiş sürüm yerine orijinal fonksiyonu çağır.

Uygulamalı interaktif egzersiz

Bu örnek kodu tamamlayarak bu egzersizi bitirin.

@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))
Kodu Düzenle ve Çalıştır