Funções são a pedra angular de código Python modular e reutilizável. Este tutorial mergulha nas intrincadas particularidades dos argumentos de função, equipando você com o conhecimento para escrever programas mais limpos, eficientes e menos propensos a erros.
Sumário
- Argumentos Posicionais
- Argumentos Nomeados
- Argumentos com Valor Padrão
- Número Variável de Argumentos (*args e **kwargs)
- Argumentos Mutáveis vs. Imutáveis
Argumentos Posicionais
Argumentos posicionais são a forma mais simples. Eles são passados para uma função na ordem em que são definidos. A ordem é estritamente aplicada; a incompatibilidade da ordem dos argumentos durante a chamada da função levará a resultados incorretos ou erros.
def greet(name, greeting):
print(f"{greeting}, {name}!")
greet("Alice", "Hello") # Ordem correta
greet("Hello", "Alice") # Ordem incorreta - imprimirá "Alice, Hello!"
Argumentos Nomeados
Argumentos nomeados permitem que você especifique o nome do argumento ao chamar uma função. Isso torna seu código mais legível e menos propenso a erros, especialmente ao lidar com funções que possuem muitos parâmetros. A ordem dos argumentos nomeados não importa.
def describe_pet(animal_type, pet_name, age=None):
print(f"nEu tenho um {animal_type}.")
print(f"O nome do meu {animal_type} é {pet_name.title()}.")
if age:
print(f"Meu {animal_type} tem {age} anos.")
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='willie', animal_type='dog', age=5)
Argumentos com Valor Padrão
Argumentos com valor padrão fornecem um valor de retorno para parâmetros de função. Se um valor não for fornecido quando a função é chamada, o valor padrão é usado. Argumentos com valor padrão devem sempre ser colocados após argumentos não-padrão na definição da função.
def power(base, exponent=2):
return base ** exponent
print(power(3)) # Saída: 9 (expoente padrão é 2)
print(power(3, 3)) # Saída: 27
Número Variável de Argumentos (*args e **kwargs)
A sintaxe `*args` e `**kwargs` permite que você manipule um número variável de argumentos posicionais e nomeados, respectivamente. `*args` coleta argumentos posicionais em uma tupla, enquanto `**kwargs` coleta argumentos nomeados em um dicionário.
def my_function(*args, **kwargs):
print("Argumentos posicionais:", args)
print("Argumentos nomeados:", kwargs)
my_function(1, 2, 3, name="Alice", age=30)
Argumentos Mutáveis vs. Imutáveis
Entender a mutabilidade é crucial ao trabalhar com argumentos de função. Objetos imutáveis (como números, strings, tuplas) não podem ser alterados dentro de uma função; quaisquer alterações criam um novo objeto. Objetos mutáveis (como listas, dicionários) podem ser modificados no local, afetando o objeto original fora da função. Isso pode levar a efeitos colaterais inesperados se não for tratado com cuidado.
def modify_list(my_list):
my_list.append(4) # Modifica a lista original
my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # Saída: [1, 2, 3, 4] (lista original modificada)
def modify_string(my_string):
my_string += "!!!" # Cria uma nova string
my_string = "Hello"
modify_string(my_string)
print(my_string) # Saída: Hello (string original inalterada)
Este guia abrangente fornece uma base sólida para trabalhar com argumentos de função em Python. Dominar esses conceitos melhorará significativamente a qualidade e a manutenibilidade do seu código.