Como escrever funções em Python
Shayne Miel
Software Architect @ Duo Security
import time
def timer(func):
"""Um decorador que imprime quanto tempo uma função levou para rodar.
Args:
func (callable): A função sendo decorada.
Returns:
callable: A função decorada.
"""
import time def timer(func): """Um decorador que imprime quanto tempo uma função levou para rodar."""# Defina a função wrapper a ser retornada. def wrapper(*args, **kwargs):# Quando wrapper() for chamada, pegue o horário atual. t_start = time.time()# Chame a função decorada e guarde o resultado. result = func(*args, **kwargs)# Calcule o tempo total de execução e imprima. t_total = time.time() - t_start print('{} levou {}s'.format(func.__name__, t_total))return resultreturn wrapper
@timer
def sleep_n_seconds(n):
time.sleep(n)
sleep_n_seconds(5)
sleep_n_seconds levou 5.0050950050354s
sleep_n_seconds(10)
sleep_n_seconds levou 10.010067701339722s
def memoize(func): """Armazena os resultados da função decorada para busca rápida """# Guarde resultados num dict que mapeia argumentos para resultados cache = {}# Defina a função wrapper a ser retornada. def wrapper(*args, **kwargs): # Defina uma chave hashable para 'kwargs'. kwargs_key = tuple(sorted(kwargs.items()))# Se esses argumentos não foram vistos antes, if (args, kwargs_key) not in cache:# Chame func() e armazene o resultado. cache[(args, kwargs_key)] = func(*args, **kwargs)return cache[(args, kwargs_key)]return wrapper
@memoize
def slow_function(a, b):
print('Sleeping...')
time.sleep(5)
return a + b
slow_function(3, 4)
Sleeping...7
slow_function(3, 4)
7
@timer
def foo():
# do some computation
@timer
def bar():
# do some other computation
@timer
def baz():
# do something else
Como escrever funções em Python