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

Sign in to your account

By continuing, you agree to our Terms of Service and Privacy Policy.