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 é:
  1. Os argumentos somente posicionais vêm antes de um / na definição da função.
  1. Se o / estiver presente na definição da função, os argumentos antes dele são somente posicionais.
  1. Argumentos somente posicionais não podem ser passados por nome.
  1. 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.
 
To check your solution you need to sign in
Sign in to continue