Чтобы использовать hash
, поскольку @lhunath предлагает , в сценарии bash:
hash foo &> /dev/null
if [ $? -eq 1 ]; then
echo >&2 "foo not found."
fi
Этот скрипт запускает hash
, а затем проверяет, является ли код выхода из самая последняя команда, значение, сохраненное в $?
, равно 1
. Если hash
не находит foo
, код выхода будет 1
. Если присутствует foo
, код выхода будет 0
.
&> /dev/null
перенаправляет стандартную ошибку и стандартный вывод из hash
, чтобы он не отображался на экране, а echo >&2
записывает сообщение к стандартной ошибке.
Да, вы можете использовать специальный формат документации для методов и их параметров, чтобы PyCharm мог знать тип. Недавняя версия PyCharm поддерживает большинство распространенных форматов doc .
Например, PyCharm извлекает типы из комментариев @param style .
См. также reStructuredText и соглашения docstring (PEP 257).
Другой вариант - аннотации Python 3.
Пожалуйста, в разделе документации PyCharm для получения более подробной информации и образцов.
Вы также можете утверждать, что тип и Pycharm выведут его:
def my_function(an_int):
assert isinstance(an_int, int)
# Pycharm now knows that an_int is of type int
pass
PyCharm извлекает типы из строки @type pydoc. См. Здесь PyCharm docs здесь и здесь и Epydoc docs . Он находится в разделе «legacy» PyCharm, возможно, ему не хватает функциональности.
class King:
def repress(self, peasant):
"""
Exploit the workers by hanging on to outdated imperialist dogma which
perpetuates the economic and social differences in our society.
@type peasant: Person
@param peasant: Person to repress.
"""
peasant.knock_over() # Shows a warning. And there was much rejoicing.
Соответствующая часть - это строка @type peasant: Person
строки docstring.
Мое намерение не чтобы украсть очки у CrazyCoder или оригинального вопросника, непременно дайте им свои очки. Я просто подумал, что простой ответ должен быть в слоте «ответ».
Если вы используете Python 3.0 или новее, вы также можете использовать аннотации для функций и параметров. PyCharm будет интерпретировать их как тип, который должен иметь аргумент или возвращаемые значения:
class King:
def repress(self, peasant: Person) -> bool:
peasant.knock_over() # Shows a warning. And there was much rejoicing.
return peasant.badly_hurt() # Lets say, its not known from here that this method will always return a bool
Иногда это полезно для непубличных методов, для которых не требуется docstring. В качестве дополнительного преимущества эти аннотации могут быть доступны по коду:
>>> King.repress.__annotations__
{'peasant': <class '__main__.Person'>, 'return': <class 'bool'>}
Обновление: по состоянию на PEP 484 , который был принят для Python 3.5, он также является официальным соглашение для указания типов аргументов и возвратов с использованием аннотаций.
Я использую PyCharm Professional 2016.1, пишущий код py2.6-2.7, и я обнаружил, что с помощью reStructuredText я могу выражать типы более succint способом:
class Replicant(object):
pass
class Hunter(object):
def retire(self, replicant):
""" Retire the rogue or non-functional replicant.
:param Replicant replicant: the replicant to retire.
"""
replicant.knock_over() # Shows a warning.
См.: https : //www.jetbrains.com/help/pycharm/2016.1/type-hinting-in-pycharm.html#legacy