Аргументы только по позиции

Продолжая изучать Python, вы встретите такую концепцию, как аргументы функций. В Python есть разные способы передачи аргументов в функцию: аргументы по умолчанию, именованные аргументы и позиционные аргументы. Но существует особый вид аргументов, которые можно передавать только по позиции, а не по имени, — это аргументы только по позиции.

Начиная с Python 3.8, в определениях функций появился специальный синтаксис /, который указывает, что некоторые аргументы являются только позиционными. Такие аргументы располагаются перед / в определении функции.

Рассмотрим функцию, которая складывает три числа:

def add_numbers(a, b, c):
    return a + b + c

Мы можем вызвать эту функцию, передавая аргументы в порядке их определения, то есть по позиции:

print(add_numbers(10, 20, 30))
# outputs: 60

А можем вызвать ее, используя имена аргументов, то есть по ключу:

print(add_numbers(a=10, b=20, c=30))
# outputs: 60

Но что если мы хотим гарантировать, что некоторые аргументы всегда передаются в определенном порядке? Здесь на помощь приходят аргументы только по позиции. Давайте изменим функцию add_numbers, сделав a и b только позиционными:

def add_numbers(a, b, /, c):
    return a + b + c

Теперь мы можем вызвать эту функцию, передавая аргументы по позиции:

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

Однако если мы попытаемся передать аргументы только по позиции как именованные, получим TypeError. В этом случае a и b должны передаваться по позиции. Аргумент c можно передать как по позиции, так и по имени.

Итак, синтаксис для аргументов только по позиции следующий:

  1. Аргументы только по позиции располагаются перед / в определении функции.

  2. Если в определении функции присутствует /, то аргументы перед ним являются только позиционными.

  3. Аргументы только по позиции нельзя передать по имени.

  4. Аргументы после / можно передавать по позиции или по имени.

Есть ли встроенные функции в Python, которые имеют только позиционные аргументы?

Да, многие встроенные функции Python используют аргументы только по позиции. Например, функция abs():

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

Параметр x в abs является аргументом только по позиции, и если мы попытаемся передать его как именованный аргумент, программа выдаст 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.