контекстная справка python 3.8, когда курсор мыши указывает на метод или функцию

#python-3.x #pycharm

#python-3.x #pycharm

Вопрос:

Когда я навожу курсор на метод с помощью мыши внутри Pycharm, отображается очень подробная контекстная справка. Может кто-нибудь объяснить, как понять / прочитать этот конкретный пример? Ниже я навел курсор на «сортированный» метод, который, как я полагаю, является встроенной функцией.

 builtins 
@overload
def sorted(__iterable: Iterable[_T],
           *,
           key: (_T) -> _SupportsLessThan,
           reverse: bool = ...) -> List[_T]
Possible types:
• (__iterable: Iterable[_LT], Any, key: None, reverse: bool) -> List[_LT]
• (__iterable: Iterable[_T], Any, key: (_T) -> _SupportsLessThan, reverse: bool) -> List[_T]
Return a new list containing all items from the iterable in ascending order.
  

Например, _T , -> , _LT , обратный: …. что все это значит?

Комментарии:

1. Вы получаете сигнатуру возможных функций и краткое описание. _T это тип ваших данных (просто потому key , что они должны быть совместимы с тем же временем. Вы можете увидеть документацию о вводе аннотаций на Python в docs.python.org/3/library/typing.html , но это продвинутая тема, и аннотации типов являются необязательными

Ответ №1:

Давайте разберем сигнатуру функции. Эта функция получает 3 аргумента. Имя первого аргумента равно __iterable , и за ним следует : Iterable[_T] . Этот синтаксис предназначен для указания аннотаций ввода, что является необязательным и на самом деле не применяется python. Но эти аннотации ввода могут быть весьма полезными и проверяться с помощью таких инструментов, как mypy.

После : следующего имени аргумента вы получаете тип этого аргумента. Это может быть определенный тип int , например, str , YourClass , и т.д.. Но часто нам требуется больше гибкости. Например, вместо того, чтобы ограничивать тип просто list , часто функция может принимать все, что мы можем повторить. Чтобы указать этот тип типа typing , модуль предоставляет несколько вариантов. В этом случае Iterable используется. Это «общий тип», поскольку фактические элементы в нем также имеют тип. _T Здесь только заполнитель. Используя _T также в key аргументе, вы говорите, что тип key связан с типом, возвращаемым повторением __iterable .

Синтаксис в key: (_T) -> _SupportsLessThan может показаться странным на первый взгляд, но это означает, что key это функция (скобки являются ключом здесь), и эта функция получает один аргумент типа _T . То есть эта функция получает тот же тип, который вы получаете при повторении __iterable . -> _SupportsLessThan Часть определяет тип возвращаемого значения этой функции. Все, что он говорит, это то, что тип того, что возвращает эта функция, должен поддерживать сравнение с < оператором.

Указывает -> List[_T] тип возвращаемого sorted значения функции. Еще раз обратите внимание на использование _T . В конце концов, прочитав подпись и не глядя на исходный код этой функции для ее выполнения, вы точно знаете, что она ожидает в качестве аргументов, и вы точно знаете, что она возвращает.

Комментарии:

1. Конечно, никаких проблем,. Если вы считаете, что это полностью отвечает на ваш вопрос, тогда примите ответ. Если вы не считаете, что на ваш вопрос нет полного ответа. В этом случае вы можете прокомментировать здесь либо для меня, чтобы добавить дополнительную информацию, либо для кого-то другого, чтобы написать другой ответ.