Существует ли среда разработки python, которая сообщит вам тип переменной при наведении на нее курсора?

#python #eclipse #vim #emacs #ide

#python #eclipse #vim #emacs #среда разработки

Вопрос:

Иногда я пишу проекты и возвращаюсь к ним только спустя месяцы. К сожалению для меня, я забыл, что предназначалось для передачи в функцию. Я хотел бы иметь возможность навести курсор на аргумент и увидеть тип, такой как целое число, строка, некоторый класс и т.д. Существует ли среда разработки, которая сделает это за меня? Приветствуется любая помощь.

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

1. Для этого и существуют строки документации. Кроме того, переменные в Python не имеют типов. Это просто имена, ссылающиеся на какой-либо объект, который потенциально может быть чем угодно, или что-то «похожее» на что-либо (утиный ввод).

2. В Python переменные не имеют типов. Значения (объекты) имеют типы, и одно или несколько имен могут ссылаться на значение. Попробуйте использовать комментарии или строки документации.

3. Кстати, Python — это не Java . Поэтому, пожалуйста, не ожидайте, что она будет работать так же.

Ответ №1:

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

 def foo(a, b):
    """
    Take your arguments back, I don't want them!

    a -- int
    b -- str
    """

    return a, b
  

В Python 3 вы также могли бы воспользоваться преимуществами аннотаций функций:

 def foo(a: int, b: str):
    """Take your arguments back, I don't want them!"""

    return a, b
  

Ответ №2:

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

Например, any встроенная функция перебирает свой аргумент и возвращает, True если какой-либо из ее элементов равен true. Звучит как функция из списка bool в bool? Неверно. Все, что для этого нужно, — это что-то, что можно повторить. Сюда входят списки, кортежи, словари, наборы, генераторы и другие встроенные типы, не говоря уже о пользовательских классах, реализующих протокол iterator. Таким образом, вы даже не можете сделать вывод, что это потому, что any вызывается для чего-то, что является списком. И любое значение python (я полагаю) может быть оценено как true / false в логическом контексте, поэтому содержимое последовательности даже не обязательно должно быть bools.

Большая часть кода не использует полный «динамизм» Python, и ожидается, что в каждую переменную будут помещаться значения только одного типа. Итак, теоретически, вы могли бы использовать некоторые аннотации и эвристику, чтобы время от времени делать вывод типа. Я не знаю ни одной среды разработки, которая пыталась бы это сделать, и я не верю, что это действительно практично.

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

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

1. На самом деле, я думаю, что Eclipse и Netbeans оба используют эвристический вывод типа. Однако это работает не слишком хорошо.

2. @Mechanicalsnail Я использовал Eclipse PyDev, хотя и не использую его в полной мере. Я не заметил, чтобы она выводила типы (т. Е., похоже, она не сообщает мне тип переменной при наведении на нее курсора или не использует тип для информирования об автозаполнении). Она отлично справляется с действительно очевидными случаями, когда имя является объектом, непосредственно определенным в локальной области видимости (или импортированным откуда-то, где оно определено напрямую), и является функцией или имеет атрибуты. Я полагаю, что в этом есть хотя бы небольшой вывод о типе «голых костей». Я никогда не использовал Netbeans и не видел его, поэтому не знаю, на что это похоже.

Ответ №3:

В PyCharm вы можете удерживать CTRL и указывать на идентификатор, чтобы увидеть его предполагаемый тип. PyCharm может определять многие типы из назначений и возвращаемых значений, а также может определять аргументы и возвращаемые типы как из docstrings, так и из аннотаций функций python3.