Подтвердить что ты не робот

Как узнать тип возвращаемого значения функции и тип аргумента?

Пока я понимаю концепцию Python, я иногда борюсь с типом аргументов функций или типом возвращаемого значения функции.

Теперь, если я сам написал функцию, я знаю типы. Но что, если кто-то захочет использовать и назвать мои функции, как он/она должен знать типы? Я обычно помещаю информацию типа в функцию docstring (например: "...the id argument should be an integer..." и "... the function will return a (string, [integer]) tuple.")

Но ищет информацию в докштрине (и ставит ее там, как кодер) действительно так, как это должно быть сделано?

Изменить: Пока большинство ответов, похоже, направлено на "да, документ!". Я считаю, что это не всегда очень легко для "сложных" типов.
Например: как кратко описать в docstring, что функция возвращает список кортежей, с каждым кортежем формы (node_id, node_name, uptime_minutes) и что элементы являются соответственно строкой, строкой и целым числом?
Документация PEP документации docstring не дает никаких рекомендаций по этому вопросу.
Я думаю, что контраргумент будет заключаться в том, что в этом случае классы должны использоваться, но я нахожу python очень гибким, потому что он позволяет обходить эти вещи с помощью списков и кортежей, т.е. Без классов.

4b9b3361

Ответ 1

Ну, с 2011 года все немного изменилось! Теперь в Python 3.5 есть подсказки типа, которые вы можете использовать для аннотирования аргументов и возврата типа вашей функции. Например это:

def greeting(name):
  return 'Hello, {}'.format(name)

теперь можно записать так:

def greeting(name: str) -> str:
  return 'Hello, {}'.format(name)

Как вы теперь можете видеть типы, есть некоторая дополнительная статическая проверка типов, которая поможет вам и вашему контролеру типов исследовать ваш код.

для более подробного объяснения я предлагаю взглянуть на сообщение в блоге о подсказках типов в блоге PyCharm.

Ответ 2

Так работают динамические языки. Однако это не всегда хорошо, особенно если документация оставляет желать лучшего - кто-то пытался использовать плохо документированную структуру python? Иногда вам нужно вернуться к чтению источника.

Вот некоторые стратегии, чтобы избежать проблем с утиным типом:

  • создать язык для проблемной области
  • это поможет вам правильно назвать материал.
  • использовать типы для представления понятий на вашем языке домена
  • параметры функции имени с использованием лексики языка домена

Кроме того, одна из наиболее важных точек:

  • сохранить данные как можно более локальными!

Должно существовать только несколько хорошо определенных и документированных типов. Все остальное должно быть очевидным, если посмотреть на код: не имеют странных типов параметров, издаваемых издалека, которые вы не можете понять, глядя в окрестности кода...

Связанный (а также связанный с docstrings), есть метод в python под названием doctests. Используйте это, чтобы документировать, как будут использоваться ваши методы - и иметь приятный охват unit test в одно и то же время!

Ответ 3

Да, вы должны использовать docstrings, чтобы ваши классы и функции были более дружественными для других программистов:

Подробнее: http://www.python.org/dev/peps/pep-0257/#what-is-a-docstring

Некоторые редакторы позволяют вам видеть docstrings при наборе текста, поэтому это действительно облегчает работу.

Ответ 4

Я посетил курс курсеры, был урок, в котором нас учили дизайнерскому рецепту.

Ниже формата docstring я нашел полезные советы.

def area(base, height):
    '''(number, number ) -> number    #**TypeContract**
    Return the area of a tring with dimensions base   #**Description**
    and height

    >>>area(10,5)          #**Example **
    25.0
    >>area(2.5,3)
    3.75
    '''
    return (base * height) /2 

Я думаю, что если docstrings написаны таким образом, это может сильно помочь разработчикам.

Ссылка на видео [смотреть видео]: https://www.youtube.com/watch?v=QAPg6Vb_LgI

Ответ 5

Да, это так.

В Python функция не всегда должна возвращать переменную того же типа (хотя ваш код будет более читабельным, если ваши функции всегда возвращают один и тот же тип). Это означает, что вы не можете указать один тип возврата для функции.

Таким же образом параметры не всегда должны быть одного и того же типа.

Ответ 6

Да, поскольку он динамически набирает язык;)

Прочтите это для справки: PEP 257

Ответ 7

Например: как кратко описать в docstring, что функция возвращает список кортежей, с каждым кортежем формы (node_id, node_name, uptime_minutes) и что элементы являются соответственно строкой, строкой и целым?

Ум... Нет такого "краткого" описания этого. Это сложно. Вы разработали его, чтобы быть сложным. И это требует сложной документации в docstring.

Извините, но сложность - хорошо - сложная.

Ответ 8

Докстры (и документация в целом). Python 3 вводит (необязательно) аннотации функций, как описано в PEP 3107 (но не оставляйте докстроны)

Ответ 9

Я много работал на Python, так что это не просто поверхностный ответ; Пожалуйста, используйте статически типизированный язык, такой как Go или TypeScript для производственного использования. Это ужас кодирования, пытающийся выяснить типы в любых немного сложных приложениях с динамически типизированными языками.