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

Продолжая изучать 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. Аргументы только по позиции располагаются перед / в определении функции.
  1. Если в определении функции присутствует /, то аргументы перед ним являются только позиционными.
  1. Аргументы только по позиции нельзя передать по имени.
  1. Аргументы после / можно передавать по позиции или по имени.
Есть ли встроенные функции в 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