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

Продолжая изучать 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