Прямая косая черта (/) указывает, что все аргументы, предшествующие этому, являются позиционным аргументом. Функция только позиционных аргументов была добавлена в Python 3.8 после принятия PEP 570 . Первоначально эта нотация была определена в PEP 457 - Нотация для нотации только для позиционных параметров.
Параметры в определении функции до косой черты Foraward (/) являются только позиционными, а параметры, сопровождаемые косой чертой (/), могут быть любого типа в соответствии с синтаксисом. Где аргументы отображаются в позиционные параметры только на основе их положения при вызове функции. Передача только позиционных параметров по ключевым словам (имя) недопустима.
Давайте возьмем следующий пример
def foo(a, b, / , x, y):
print("positional ", a, b)
print("positional or keyword", x, y)
Здесь в приведенном выше определении функции параметры a и b являются только позиционными, в то время как x или y могут быть позиционными или ключевыми словами.
Следующие вызовы функций действительны
foo(40, 20, 99, 39)
foo(40, 3.14, "hello", y="world")
foo(1.45, 3.14, x="hello", y="world")
Но следующий вызов функции недопустим, что вызывает исключение TypeError, поскольку a, b не передаются как позиционные аргументы, а передаются как ключевое слово
foo(a=1.45, b=3.14, x=1, y=4)
TypeError: foo () получил некоторые позиционные аргументы, переданные в качестве аргументов ключевого слова: 'a, b'
Многие встроенные в Python функции принимают только позиционные аргументы, когда передача аргументов по ключевому слову не имеет смысла. Например, встроенная функция len принимает только один позиционный (единственный) аргумент, где вызов len как len (obj = "hello world") ухудшает читабельность, проверьте help (len).
>>> help(len)
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
Только позиционные параметры позволяют легко поддерживать базовые функции c / library. Это позволяет в будущем изменять имена параметров только позиционных параметров без риска нарушения кода клиента, использующего API.
И последнее, но не менее важное: позиционные параметры позволяют нам использовать их имена для использования в аргументах ключевых слов переменной длины. Проверьте следующий пример
>>> def f(a, b, /, **kwargs):
... print(a, b, kwargs)
...
>>> f(10, 20, a=1, b=2, c=3) # a and b are used in two ways
10 20 {'a': 1, 'b': 2, 'c': 3}
Позиционные параметры только лучше Объяснено здесь в Типах аргументов функции в python: Позиционные Только Параметры
Синтаксис только для позиционных параметров был официально добавлен в python3.8. Оформить заказ Что нового python3.8 - позиционные только аргументы
Связанный с PEP: PEP 570 - только позиционные параметры Python
/
токена, потому что «это обратная операция*
» показывает, что Python просто немного сумасшедший. Это своего рода синестезия.