Зачем использовать только позиционные аргументы в Python 3.8? - PullRequest
0 голосов
/ 21 октября 2019

Новый синтаксис «только позиционные аргументы» был введен в 3.8.

Из Позиционные только параметры в документации:

Появился новыйсинтаксис (/) для указания того, что некоторые параметры функции должны быть определены позиционно (то есть не могут использоваться в качестве аргументов ключевых слов). Это то же обозначение, которое показано help() для функций, реализованных в C (разработано инструментом Argument Clinic Ларри Хастингса ).

От http://northtexasroofing.net/article/10509084.shtml:

Теперь pow(2, 10) и pow(2, 10, 17) являются допустимыми вызовами, но pow(x=2, y=10) и pow(2, 10, z=17) являются недействительными.


Мой вопрос: зачем вообще использовать этот синтаксис?

Почему это лучше для пользователя кода?

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

Зачем усложнять пользователю?

Я явно что-то упускаю.

1 Ответ

0 голосов
/ 21 октября 2019

Для краткого изложения изложенных обоснований в PEP 570 , PEP, который добавил аргументы только для позиционирования:

  1. Многие встроенные функции, реализованные в C, уже не принимают ключевое словоаргументы, даже до Python 3.8. Разрешение только позиционного аргумента позволяет коду Python быть совместимым с кодом C
  2. Некоторые классы Python, такие как конструктор для типа dict, принимают произвольные аргументы ключевого слова. Если бы вы попытались определить класс с таким поведением в python, вам нужно было бы написать def __init__(self, **kwds), ... кроме того, у вас не может быть аргумента с ключевым словом с именем self !. Только позиционные аргументы могут избежать этого недостатка.
  3. У некоторых функций нет естественных имен, которым можно присвоить свои аргументы. Возьмите конструктор int. int(x="3") не более читабелен, чем int("3"). Только позиционные аргументы позволяют именам, которые не имеют присущего значения, рассматриваться как детали реализации, а не как часть открытого API модуля.

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

...