Da trilha de Python Este conceito ainda não saiu como card do dia. ir para o card de hoje

Python Funções Básico

Funções e argumentos

Em Python, funções são blocos de código reutilizáveis que podem receber argumentos para personalizar seu comportamento. Você pode passar argumentos por posição ou por nome (keyword arguments), o que torna a chamada mais legível e permite alterar a ordem. Além disso, funções podem ter valores padrão para parâmetros, mas cuidado: usar um objeto mutável como padrão (ex.: []) pode causar surpresas, pois o valor é compartilhado entre chamadas.

Para aceitar um número variável de argumentos, use *args (para posicionais) e **kwargs (para nomeados). Isso é útil quando você não sabe quantos argumentos serão passados. Por fim, Python 3 introduziu parâmetros keyword-only, que só podem ser passados por nome, usando * na definição. Isso força a clareza na chamada e evita erros.

Neste card, você vai explorar esses recursos com exemplos práticos e exercícios que cobrem desde o básico até um desafio que combina todos os conceitos.

Pontos-chave

  • Argumentos nomeados permitem passar valores associando o nome do parâmetro, melhorando a legibilidade.
  • Valores padrão mutáveis são avaliados uma única vez e compartilhados entre chamadas; use None como padrão e crie o objeto dentro da função.
  • *args captura argumentos posicionais extras como uma tupla; **kwargs captura argumentos nomeados extras como um dicionário.
  • Parâmetros keyword-only são definidos após um * e só podem ser passados por nome.
  • A ordem dos parâmetros na definição importa: posicionais, *args, keyword-only com padrão, **kwargs.
funcoes_argumentos.py
# Exemplo completo de funções e argumentos em Python

def saudacao(nome, mensagem="Olá"):
    """Função com argumento posicional e valor padrão."""
    return f"{mensagem}, {nome}!"

# Argumento posicional
print(saudacao("Ana"))  # Olá, Ana!
# Argumento nomeado
print(saudacao(nome="Beto", mensagem="Bom dia"))  # Bom dia, Beto!

# Valor padrão mutável (evite!)
def adicionar_item(item, lista=[]):
    lista.append(item)
    return lista

print(adicionar_item("a"))  # ['a']
print(adicionar_item("b"))  # ['a', 'b'] -> surpresa!

# Forma correta: usar None como padrão
def adicionar_item_seguro(item, lista=None):
    if lista is None:
        lista = []
    lista.append(item)
    return lista

print(adicionar_item_seguro("a"))  # ['a']
print(adicionar_item_seguro("b"))  # ['b']

# *args e **kwargs
def mostra_tudo(*args, **kwargs):
    print("Posicionais:", args)
    print("Nomeados:", kwargs)

mostra_tudo(1, 2, 3, nome="Ana", idade=25)

# Keyword-only: após *
def configurar(*, host, porta=8080):
    return f"{host}:{porta}"

print(configurar(host="localhost"))  # localhost:8080
# print(configurar("localhost"))  # Erro: argumento posicional não permitido

Exercícios

  1. 1
    Fácil

    Saudação com argumento nomeado

    Crie uma função saudacao que receba nome e mensagem (com valor padrão "Olá") e retorne uma string no formato "{mensagem}, {nome}!". Chame a função duas vezes: uma passando apenas nome="Ana" e outra passando nome="Beto" e mensagem="Bom dia". Imprima os resultados.

    Resolver
  2. 2
    Médio

    Lista segura com valor padrão mutável

    Crie uma função adicionar_item que receba um item e uma lista opcional. Se a lista não for fornecida, crie uma nova lista vazia a cada chamada. A função deve adicionar o item à lista e retorná-la. Teste chamando a função duas vezes sem passar lista e depois passando uma lista existente. Imprima os resultados.

    Resolver
  3. 3
    Desafio

    Função com *args, **kwargs e keyword-only

    Crie uma função processar que aceite qualquer número de argumentos posicionais (*args), um parâmetro keyword-only obrigatório modo (que deve ser "soma" ou "lista"), e qualquer número de argumentos nomeados extras (**kwargs). A função deve:

    • Se modo for "soma", retornar a soma de todos os *args (números).
    • Se modo for "lista", retornar uma lista com todos os *args.
    • Em ambos os casos, incluir os **kwargs em um dicionário separado e imprimir uma mensagem com eles.

    Teste chamando a função com diferentes combinações e imprima os resultados.

    Resolver

Continue estudando