Funções
Aula 4 de 10
Definindo Funções
def saudacao(nome):
"""Documentação: exibe saudação."""
return f"Olá, {nome}!"
print(saudacao("Maria"))
# Múltiplos parâmetros
def soma(a, b):
return a + b
Parâmetros
# Parâmetros posicionais
def config(host, porta, debug=False):
print(f"{host}:{porta}, debug={debug}")
# Chamadas válidas
config("localhost", 8080)
config("localhost", 8080, True)
config(host="localhost", porta=8080, debug=True)
config(porta=8080, host="localhost") # kwargs fora de ordem
# Parâmetros default (devem vir após obrigatórios)
def login(user, pwd, timeout=30, retries=3):
pass
# *args (argumentos posicionais variáveis)
def soma(*numeros):
return sum(numeros)
print(soma(1, 2, 3, 4, 5)) # 15
# **kwargs (argumentos nomeados variáveis)
def exibir(**dados):
for chave, valor in dados.items():
print(f"{chave}: {valor}")
exibir(nome="Ana", idade=30, cidade="SP")
Escopo
global_var = 10
def funcao():
global global_var
local_var = 5
global_var += 1 # modifica variável global
print(global_var) # 11
print(local_var) # 5
# nonlocal (closures)
def externa():
x = 0
def interna():
nonlocal x
x += 1
return x
return interna
contador = externa()
print(contador()) # 1
print(contador()) # 2
Funções Lambda
# lambda args: expressão
quadrado = lambda x: x ** 2
print(quadrado(5)) # 25
# Úteis com sorted, filter, map
numeros = [3, 1, 4, 1, 5]
ordenado = sorted(numeros, key=lambda x: -x) # [5, 4, 3, 1, 1]
pares = list(filter(lambda x: x % 2 == 0, range(10))) # [0, 2, 4, 6, 8]
dobros = list(map(lambda x: x * 2, range(5))) # [0, 2, 4, 6, 8]
Decorators
from functools import wraps
import time
def timer(func):
@wraps(func)
def wrapper(*args, **kwargs):
inicio = time.time()
resultado = func(*args, **kwargs)
duracao = time.time() - inicio
print(f"{func.__name__} levou {duracao:.3f}s")
return resultado
return wrapper
@timer
def processar():
time.sleep(0.5)
return "feito"
Funções são cidadãs de primeira classe em Python: podem ser passadas como argumento, retornadas e armazenadas. Use *args/**kwargs para APIs flexíveis.