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.

  2. Se o / estiver presente na definição da função, os argumentos antes dele são somente posicionais.

  3. Argumentos somente posicionais não podem ser passados por nome.

  4. 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