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