Argumentos Somente Posicionais
Enquanto aprofunda seus conhecimentos em Python, você encontrará o conceito de argumentos de função. Em Python, existem várias maneiras de passar argumentos para uma função. Podemos ter argumentos padrão, argumentos nomeados e argumentos posicionais. Mas existe um tipo específico de argumento que só pode ser fornecido por posição e não por nome, conhecido como argumentos somente posicionais.
A partir do Python 3.8, há uma sintaxe especial
/
nas definições de funções para indicar que alguns argumentos são somente posicionais. Os argumentos somente posicionais aparecem antes do /
na definição da função.Considere esta função que soma três números:
def add_numbers(a, b, c):
return a + b + c
Podemos chamar esta função fornecendo os argumentos na ordem em que foram definidos, ou seja, por posição:
print(add_numbers(10, 20, 30))
# outputs: 60
E também podemos chamá-la usando os nomes dos argumentos, ou seja, por palavras-chave:
print(add_numbers(a=10, b=20, c=30))
# outputs: 60
Mas e se quisermos garantir que alguns argumentos sejam sempre fornecidos em uma ordem específica? É aqui que entram os argumentos somente posicionais. Vamos modificar a função
add_numbers
para tornar a
e b
argumentos somente posicionais:def add_numbers(a, b, /, c):
return a + b + c
Agora podemos ainda chamar esta função com argumentos por posição:
print(add_numbers(10, 20, 30)) # 60
print(add_numbers(a=10, b=20, c=30)) # TypeError
print(add_numbers(10, 20, c=30)) # 60
Porém, se tentarmos chamar a função usando argumentos nomeados para os argumentos somente posicionais, receberemos um
TypeError
. Neste caso, devemos fornecer a
e b
por posição. O argumento c
pode ser fornecido por posição ou por nome:Então, a sintaxe para argumentos somente posicionais é:
- Os argumentos somente posicionais vêm antes de um
/
na definição da função.
- Se o
/
estiver presente na definição da função, os argumentos antes dele são somente posicionais.
- Argumentos somente posicionais não podem ser passados por nome.
- Argumentos após o
/
podem ser passados por posição ou por nome.
Existem funções embutidas em Python que têm argumentos somente posicionais?
Sim, muitas funções embutidas em Python possuem argumentos somente posicionais. A função
abs()
, por exemplo, é um bom caso:help(abs)
# Help on built-in function abs in module builtins:
# abs(x, /)
# Return the absolute value of the argument.
abs(-6) # 6
abs(x=-6) # TypeError: abs() takes no keyword arguments
O parâmetro
x
em abs
é um argumento somente posicional, e quando tentamos passá-lo como um argumento nomeado, o programa lança um TypeError
.