Exemplos do mundo real

Como escrever funções em Python

Shayne Miel

Software Architect @ Duo Security

Cronometrar uma função

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.
  """
Como escrever funções em Python
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 result
return wrapper
Como escrever funções em Python

Usando timer()

@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
Como escrever funções em Python
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
Como escrever funções em Python
@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
Como escrever funções em Python

Quando usar decoradores

  • Adicione um comportamento comum a várias funções
@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

Vamos praticar!

Como escrever funções em Python

Preparing Video For Download...