функция помощи "python": печать строк документов - PullRequest
15 голосов
/ 19 августа 2011

Есть ли возможность распечатать вывод справки ('myfun'). Поведение, которое я вижу, состоит в том, что выходные данные печатаются в std.out, и сценарий ожидает ввода данных пользователем (т.е. введите «q», чтобы продолжить).

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

В качестве альтернативы, если бы я мог просто выбросить строку документации PLUS, строку "def f (args):" тоже было бы хорошо.

Поиск "функции помощи python" смешной. :) Может быть, мне не хватает какой-нибудь красивой страницы pydoc где-то там, где все это объясняется?

Ответы [ 4 ]

17 голосов
/ 19 августа 2011

Чтобы получить именно ту помощь, которая выводится help(str) в переменную strhelp:

import pydoc
strhelp = pydoc.render_doc(str, "Help on %s")

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

4 голосов
/ 19 августа 2011

Если вы хотите получить доступ к необработанной строке документации из кода:

   myvar = obj.__doc__
   print(obj.__doc__)

Функция справки выполняет некоторую дополнительную обработку, принятый ответ показывает, как повторить это с помощью pydoc.render_doc ().

4 голосов
/ 19 августа 2011

Вы уже видели ссылку на строку документации, магическую переменную __doc__, которая содержит тело справки:

def foo(a,b,c): 
   ''' DOES NOTHING!!!! '''
   pass

print foo.__doc__ # DOES NOTHING!!!!

Чтобы получить имя функции, вы просто используете __name__:

def foo(a,b,c): pass

print foo.__name__ # foo

Чтобы получить подпись функции, которая не встроена, вы можете использовать свойство func_code, из которого вы можете прочитать его co_varnames:

def foo(a,b,c): pass
print foo.func_code.co_varnames # ('a', 'b', 'c')

Я не нашел, как сделать то же самое для встроенных функций.

2 голосов
/ 19 августа 2011
>>> x = 2
>>> x.__doc__
'int(x[, base]) -> integer\n\nConvert a string or number to an integer, if possi
ble.  A floating point\nargument will be truncated towards zero (this does not i
nclude a string\nrepresentation of a floating point number!)  When converting a
string, use\nthe optional base.  It is an error to supply a base when converting
 a\nnon-string. If the argument is outside the integer range a long object\nwill
 be returned instead.'

Это то, что вам нужно?

редактировать - вы можете print(x.__doc__), а что касается сигнатуры функции, вы можете построить ее с помощью модуля inspect.

>>> inspect.formatargspec(inspect.getargspec(os.path.join))
'((a,), p, None, None)'
>>> help(os.path.join)
Help on function join in module ntpath:

join(a, *p)
    Join two or more pathname components, inserting "\" as needed
...