Article image

LP

Luan Pereira17/04/2024 04:22
Compartilhe

Parâmetros especiais de funções em Python de forma mais simples.

  • #Python

Parâmetros especiais

Por padrão, argumentos podem ser passados para uma função Python tanto por posição quanto explicitamente pelo nome.

Para uma melhor legibilidade e desempenho, faz sentido restringir a maneira pelo qual argumentos possam ser passados, assim um desenvolvedor precisa apenas olhar para a definição da função para determinar se os itens são passados por posição, por posição e nome, ou por nome.

A sintaxe dos parâmetros especiais é a seguinte:

def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):

image

1° Separador, apenas posição

2° No meio dos separadores são declarados posição ou chave/palavra

3° Separador, Apenas palavra

Tudo o que está até o separador '/' é apenas por posição. Tudo que está depois do separador '*' é apenas por chave/palavra. E o que está no meio dos dois separadores pode ser declarado das duas formas, tanto por posição quanto por chave=valor.

Embaixo vou deixar alguns exemplos de como realizar de forma separadamente cada opção.

  Apenas Posição, Exemplo:

def criar_carro(modelo, ano, placa, /, marca, motor, combustivel):

    print(modelo, ano, placa, marca, motor, combustivel)

criar_carro("palio", 1999, "ABC-1234", marca="Fiat", motor="1.0", combustivel="Gasolina") #válido

criar_carro(modelo="palio", ano=1999, placa="ABC-1234", marca="Fiat", motor="1.0", combustivel="Gasolina") #inválido

Aqui vou explicar para vocês como funciona esse exemplo, os 3 primeiros argumentos está sendo adicionado o valor por posição, pois os 3 primeiros argumentos estão antes do separador que é a '/'.

Como vimos antes, tudo o que está antes do separador é considerado por posição, então não é possível fazer a declaração chave=valor na hora de declarar um valor a ele.

Após o separador, todos os outros argumentos pode ser declarado tanto por posição quanto por chave=valor.

Aqui embaixo tem um código realizado através do VS code para melhor visibilidade da função.

image

Apenas por palavra, Exemplo:

def criar_carro(modelo, ano, placa, marca, motor, combustivel):

     print(modelo, ano, placa, marca, motor, combustivel)

criar_carro(modelo="palio", ano=1999, placa="ABC-1234", marca="Fiat", motor="1.0", combustivel="Gasolina") #válido

criar_carro("palio", 1999, "ABC-1234", marca="Fiat", motor="1.0", combustivel="Gasolina") #inválido

Aqui vemos o contrário, nesse caso estamos forçando a função a declarar os elementos dentro dela apenas por palavra/chave=valor.

No caso não utilizamos separadores no meio da função, utilizamos apenas o separador '*' no início para definir que essa função será utilizada apenas por chave=valor.

Nesse caso em específico o exemplo mostra a definição de chave=valor para os elementos, ou seja ele só irá rodar a função se os elementos forem declarados dessa única forma.

Como mostrado no exemplo, caso tentemos forçar uma mistura de métodos para definir valor aos elementos por posição, irá dar inválido o código.

Aqui embaixo temos um código realizado através do VS code para melhor visibilidade da função.

image

Posicional ou chave/palavra, Exemplo:

def criar_carro(modelo, ano, placa, /, *, marca, motor, combustivel):

     print(modelo, ano, placa, marca, motor, combustivel)

criar_carro("palio", 1999, "ABC-1234", marca="Fiat", motor="1.0", combustivel="Gasolina") #Válido

criar_carro(modelo="palio", ano=1999, placa="ABC-1234", marca="Fiat", motor="1.0", combustivel="Gasolina") #inválido

Aqui estamos declarando a junção das duas formas.

Primeiro fazemos a declaração por posição até o primeiro separador '/', ou seja, todos os elementos dentro do primeiro separador será declarado sem utilizar chave=valor, ou seja, será declarado apenas por posição.

Segundo fazemos a declaração por chave=valor a partir do segundo separador '*', ou seja todos os elementos a partir do segundo separador será declarado sem utilizar posição, e sim apenas por chave=valor.

Como mostrado no exemplo, caso tentemos forçar somente um método de declaração, vai desencadear com que o resultado do nosso código se torne inválido.

Aqui embaixo tem um código realizado através do VS code para melhor visibilidade da função.

image

Também é possível passar a forma opcional dentro da função utilizando esse mesmo exemplo.

Para isso vou colocar o elemento 'marca' no meio dos 2 separadores, fazendo assim com que ele possa ser declarado tanto por posição quanto por chave=valor.

image

Gostaria de deixar explícito aqui neste artigo meu sincero obrigado a plataforma DIO por essa excelente gama de diversos conteúdos, se hoje estou me tornando um profissional mais qualificado e melhor instruído é por conta de vocês!

Compartilhe
Comentários (1)

FS

Francisco Silva - 17/04/2024 06:36

Nice, gostei. Consegue explicar *args e **kwargs? Merecia outro post kk