9.1 Parâmetros vs argumentos
Os iniciantes frequentemente se confundem entre os termos "parâmetros" e "argumentos", mas a diferença é importante para compreender a programação funcional.
Parâmetros são variáveis que são listadas na definição da função. Eles são os nomes que a função usa para se referir aos valores passados a ela. Os parâmetros da função servem como "placeholders" para os valores que serão utilizados no corpo da função. Quando você define uma função, você descreve seus parâmetros.
def print_info(name, age): # name e age — são parâmetros
print(f"Name: {name}, Age: {age}")
Argumentos são valores ou dados específicos passados para a função quando ela é chamada. Os argumentos são substituídos nos lugares dos parâmetros na execução da função. Argumentos podem ser constantes, variáveis, expressões ou até mesmo resultados de outras funções.
print_info("Alice", 30) # "Alice" e 30 — são argumentos
Tipos de argumentos
- Argumentos posicionais: os valores são passados na ordem em que os parâmetros são definidos.
- Argumentos nomeados: argumentos passados para a função usando o nome do parâmetro, o que permite que eles sejam listados em qualquer ordem após os argumentos posicionais.
- Argumentos padrão: ao definir uma função os parâmetros podem ter valores padrão atribuídos a eles.
Você já está usando argumentos posicionais, e vamos falar sobre argumentos nomeados e argumentos padrão em aulas futuras.
A diferença entre parâmetros e argumentos em Python ajuda a entender como as funções recebem e processam dados. Essa distinção é importante para criar funções flexíveis que podem ser facilmente adaptadas a diferentes condições de chamada, tornando seu código mais modular e reutilizável.
9.2 Valores padrão
Argumentos padrão em Python são um mecanismo que permite que funções especifiquem valores predeterminados para um ou mais parâmetros. Essa capacidade torna a chamada de função mais conveniente e flexível, pois não exige que todos os argumentos sejam explicitamente indicados toda vez que a função é chamada.
Definindo argumentos padrão
Argumentos padrão são definidos na definição da função, onde na declaração
do parâmetro é indicado o valor que será utilizado,
se ao chamar a função o argumento não for passado
:
def print_info(name, company='Unknown'):
print(f"Name: {name}, Company: {company}")
Neste exemplo, company
tem um valor padrão de
'Unknown'.
- Simplificação da chamada de função: Funções com muitos parâmetros podem ser chamadas especificando apenas os argumentos mais importantes.
- Flexibilidade: Funções podem ser adaptadas a diferentes cenários de uso sem alterar seu código.
- Legibilidade do código: A especificação explícita de valores padrão torna o código autodescritivo.
Notas importantes
Imutabilidade: Valores padrão para argumentos devem ser de tipos de dados imutáveis, como números, strings ou tuplas. Usar tipos mutáveis (como listas ou dicionários) pode levar a efeitos colaterais indesejados, pois as mudanças nesses objetos são mantidas entre as chamadas da função.
Ordem dos argumentos: Os parâmetros com argumentos padrão devem seguir depois dos parâmetros sem argumentos padrão na definição da função.
Outro exemplo:
def create_user(username, is_admin=False):
if is_admin:
print(f"User {username} is an admin.")
else:
print(f"User {username} is a regular user.")
create_user("Alice") # is_admin == False
create_user("Bob", is_admin=True) # is_admin == True
create_user("Karl", True) # is_admin == True
Acima estão 3 maneiras de chamar uma função com um argumento padrão: todas elas funcionam.
9.3 Passagem de parâmetros por nome
Passar parâmetros para uma função por nome permite indicar mais claramente quais valores são passados para quais argumentos, melhorando a legibilidade do código e reduzindo a probabilidade de erros associados ao ordenamento incorreto dos argumentos.
Para passar o valor de um parâmetro por nome, você deve, na chamada da função, atribuir um valor a um parâmetro específico:
função(parâmetro1 = valor, parâmetro2 = valor)
Esse método é especialmente útil ao trabalhar com funções que têm muitos parâmetros ou parâmetros com valores padrão.
Vantagens da passagem de parâmetros por nome
- Clareza e legibilidade: Especificar o nome do parâmetro ao chamá-lo torna o código mais fácil de ser entendido por outros desenvolvedores ou quando você retorna ao seu próprio código antigo.
- Flexibilidade: Os parâmetros podem ser passados em qualquer ordem, o que é conveniente quando a função tem muitos parâmetros.
- Evitando erros: Não há necessidade de lembrar a ordem dos parâmetros da função, o que reduz a probabilidade de erros relacionados à transmissão incorreta de valores.
Exemplos de uso
def create_profile(name, age, job):
print(f"Name: {name}")
print(f"Age: {age}")
print(f"Job: {job}")
create_profile(name = "John", age = 28, job = "Developer")
Neste exemplo, os parâmetros não são passados na ordem, mas cada um deles é explicitamente atribuído a um valor, o que torna a chamada da função mais flexível e compreensível.
Exemplo 2:
Aliás, você já se deparou com a passagem de parâmetros por nome antes. Na
função print()
, lembra?
Características e limitações
Os parâmetros passados por nome devem seguir depois dos parâmetros sem nome, quando existirem na definição da função.
Não é permitido usar o mesmo nome de parâmetro mais de uma vez ao chamar a função.
A passagem de parâmetros por nome é uma capacidade poderosa do Python, que torna o código mais seguro e compreensível, especialmente em casos de uso de funções com muitos argumentos ou valores opcionais.
GO TO FULL VERSION