ÎncepețiÎncepe gratuit

Măsurarea costului de performanță al decoratorilor

Șeful tău a scris un decorator numit check_everything(), de care este foarte mândru, și insistă să îl folosești pe funcțiile tale. Ai observat însă că, atunci când îl aplici, funcțiile rulează mult mai lent. Trebuie să îl convingi că decoratorul adaugă prea mult timp de procesare. Pentru asta, vei măsura cât durează execuția funcției decorate și vei compara cu cât ar fi durat fără decorator. Acesta este decoratorul în cauză:

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

Acest exercițiu face parte din cursul

Scrierea funcțiilor în Python

Vezi cursul

Instrucțiuni pentru exercițiu

  • Apelează funcția originală în loc de versiunea decorată, folosind un atribut pe care instrucțiunea wraps() din decoratorul șefului tău l-a adăugat funcției decorate.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

@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))
Editează și rulează codul