Pular para o conteúdo

Como Usar Parâmetros Opcionais no Python

[

Usando Argumentos Opcionais em Python ao Definir Funções

por Ana Silva

Criando Funções em Python para Reutilização de Código

Você pode pensar em uma função como um mini programa que roda dentro de outro programa ou dentro de outra função. O programa principal chama o mini programa e envia as informações que o mini programa irá precisar enquanto roda. Quando a função completa todas as suas ações, ela pode enviar alguns dados de volta para o programa principal que a chamou.

O objetivo principal de uma função é permitir que você reutilize o código dentro dela sempre que precisar, usando diferentes entradas, se necessário.

Quando você usa funções, você está expandindo seu vocabulário em Python. Isso permite que você expresse a solução para o seu problema de uma maneira mais clara e sucinta.

Em Python, por convenção, você deve nomear uma função usando letras minúsculas com palavras separadas por underscore, como fazer_algo(). Essas convenções são descritas em PEP 8, que é o guia de estilo do Python. Você precisará adicionar parênteses após o nome da função quando chamá-la. Como as funções representam ações, é uma boa prática começar os nomes das funções com um verbo para tornar seu código mais legível.

Definindo Funções Sem Parâmetros de Entrada

Neste tutorial, você usará o exemplo de um programa básico que cria e mantém uma lista de compras e a imprime quando estiver pronto para ir ao supermercado.

Comece criando uma lista de compras:

lista_de_compras = {
"Pão": 1,
"Leite": 2,
"Chocolate": 1,
"Manteiga": 1,
"Café": 1,
}

Aqui, a função imprimir_lista_de_compras() não tem parâmetros de entrada. Ela apenas imprime a lista de compras na tela. Para utilizá-la, você pode simplesmente chamá-la:

imprimir_lista_de_compras()

Definindo Funções Com Argumentos Obrigatórios

Agora, suponha que você queira adicionar um parâmetro de entrada à função imprimir_lista_de_compras() para que você possa imprimir uma lista específica de compras de acordo com a categoria. Você pode fazer isso da seguinte maneira:

def imprimir_lista_de_compras(categoria):
for item, quantidade in lista_de_compras.items():
if categoria in item:
print(f"{quantidade} {item}")

Aqui, adicionamos um novo parâmetro categoria à função. Dentro da função, iteramos sobre os itens da lista de compras e verificamos se a categoria está presente no item. Se estiver, imprimimos o item e a quantidade.

Agora, para imprimir apenas a categoria “pão” da lista de compras, você pode chamar a função da seguinte forma:

imprimir_lista_de_compras("pão")

Usando Argumentos Opcionais em Python com Valores Padrão

Os argumentos opcionais em Python permitem que você defina um valor padrão para um parâmetro, para que ele seja usado quando nenhum valor é fornecido ao chamar a função. Isso torna os argumentos opcionais úteis quando você deseja ter um comportamento padrão, mas também permitir que o usuário substitua esse comportamento, se necessário.

Valores Padrão Atribuídos aos Parâmetros de Entrada

Voltando ao exemplo da função imprimir_lista_de_compras(), agora vamos adicionar um parâmetro opcional ordenar_por_quantidade que determinará se a lista será impressa em ordem de quantidade ou não. O valor padrão desse parâmetro será False, o que significa que não será necessário fornecer um valor ao chamar a função, a menos que você queira alterar o comportamento padrão.

Aqui está como a função pode ser modificada para usar um argumento opcional:

def imprimir_lista_de_compras(categoria, ordenar_por_quantidade=False):
if ordenar_por_quantidade:
lista_ordenada = sorted(lista_de_compras.items(), key=lambda x: x[1], reverse=True)
else:
lista_ordenada = lista_de_compras.items()
for item, quantidade in lista_ordenada:
if categoria in item:
print(f"{quantidade} {item}")

Agora, você pode imprimir a lista de compras ordenada por quantidade passando True como valor para o argumento opcional:

imprimir_lista_de_compras("pão", True)

Valores Padrão Comuns para Argumentos Opcionais

Alguns valores padrão são comuns para certos parâmetros opcionais em Python. Por exemplo, é comum usar None como valor padrão para argumentos opcionais que representam valores nulos, como em:

def calcular_area(base, altura=None):
if altura is None:
return base * base
else:
return base * altura

Aqui, se o valor de altura não for fornecido ao chamar a função calcular_area(), o valor padrão None será usado e a função calculará a área de um quadrado. Se altura for fornecido, a função calculará a área de um retângulo.

Tipos de Dados que Não Devem Ser Usados como Argumentos Padrão

Alguns tipos de dados não devem ser usados como valores padrão para argumentos opcionais, pois eles são mutáveis e podem levar a comportamentos inesperados. Por exemplo, evitar o uso de listas como valores padrão em uma função:

def adicionar_item(item, lista=[]):
lista.append(item)
return lista

Aqui, a função adicionar_item() toma um item e adiciona-o a uma lista. Se nenhum valor for fornecido para o parâmetro lista, uma nova lista vazia será criada como valor padrão. No entanto, como listas são mutáveis, a mesma lista será usada em chamadas subsequentes da função, o que levará a um comportamento inesperado:

print(adicionar_item("carro")) # ['carro']
print(adicionar_item("casa")) # ['carro', 'casa']

Usando *args e **kwargs

Em Python, você também pode criar funções que aceitam um número arbitrário de argumentos utilizando *args e **kwargs. Isso significa que você pode passar qualquer número de argumentos ou argumentos nomeados para a função.

Funções que Aceitam Qualquer Número de Argumentos

Aqui está um exemplo de uma função que aceita qualquer número de argumentos:

def saudar(*nomes):
for nome in nomes:
print(f"Olá, {nome}!")
saudar("Ana", "Carlos", "Maria")

A função saudar() aceita *nomes como parâmetro de entrada, o que significa que você pode passar quantos nomes desejar. Dentro da função, o parâmetro nomes se comporta como uma tupla, e você pode iterar sobre os elementos utilizando um loop for.

Funções que Aceitam Qualquer Número de Argumentos Nomeados

Aqui está um exemplo de uma função que aceita qualquer número de argumentos nomeados:

def exibir_info(**info):
for chave, valor in info.items():
print(f"{chave}: {valor}")
exibir_info(nome="Ana", idade=30, cidade="São Paulo")

A função exibir_info() aceita **info como parâmetro de entrada, o que significa que você pode passar quantos argumentos nomeados desejar. Dentro da função, o parâmetro info se comporta como um dicionário, e você pode acessar as chaves e valores utilizando um loop for.

Conclusão

Neste tutorial, você aprendeu como definir funções em Python que aceitam argumentos opcionais. Você viu como definir funções com parâmetros obrigatórios e como usar argumentos opcionais com valores padrão. Além disso, você aprendeu sobre o uso de *args e **kwargs para criar funções que aceitam um número arbitrário de argumentos.

Agora você tem as ferramentas necessárias para definir funções mais poderosas e flexíveis em Python. Experimente criar suas próprias funções com argumentos opcionais e veja como isso pode tornar seu código mais reutilizável.

Recursos Adicionais