Как увидеть сигнатуру функции в Python?

Есть ли способ проанализировать функцию, чтобы она показывала мне информацию о принимаемых аргументах (например, количество аргументов, тип, если возможно, имя аргумента, если он назван) и возвращаемое значение? dir(), похоже, не делает то, что я хочу. Строка __doc__ иногда включает аргументы метода / функции, но часто этого не происходит.


person mindthief    schedule 12.12.2010    source источник
comment
В общем, документация (не обязательно __doc__) - ваш лучший выбор.   -  person    schedule 12.12.2010
comment
Чтобы увидеть подпись функции. Шаг 1. Прочтите код. Шаг 2. Поиск. stackoverflow.com/questions/2677185/how-read-method-signature На этот вопрос здесь уже дан ответ несколько раз. stackoverflow.com/questions/3375573/, также.   -  person S.Lott    schedule 12.12.2010
comment
Цените ссылки, но, честно говоря, я думаю, что мой вопрос намного более лаконичен и ясен, чем те, которые вы отправили. Это, по крайней мере, подтверждается тем, что я провел поиск, и через несколько минут поиск ничего не дал. : \   -  person mindthief    schedule 12.12.2010
comment
@mindthief: интересно, вы приняли ответ, совершенно не совпадающий с тем, что вы спрашиваете. Вы специально отклонили строку __doc__ в своем вопросе, но приняли ее в своем ответе. Из этого, а также из ваших комментариев неясно, что вы действительно ищете. Не могли бы вы уточнить?   -  person S.Lott    schedule 12.12.2010
comment
@ S.Lott Конечно, __doc__ показывает только строку документа функции, а не аргументы. Если вам повезет, то строка документа может объяснить использование аргументов и неявно предоставить информацию, которую я искал. Но функция help () дает вам точную сигнатуру функции (что было моим заявленным требованием), а также строку документа, которая действительно является всем, что вам нужно, поскольку строка документа может содержать дополнительное объяснение, не очевидное только по подписи. Пример ответа на самом деле вызывается для класса, а не для функции, поэтому он кажется более подробным, чем вы ожидаете.   -  person mindthief    schedule 12.12.2010
comment
@mindthief: ответ показывает помощь для класса, а не для функции. Я не могу понять, насколько ответ соответствует заявленным вами требованиям. Кроме того, когда я делаю help(abs), кажется, что отображается только строка __doc__. Но, поскольку вы довольны, это все, что имеет значение. Я до сих пор не понимаю, почему этот вопрос не повторяется полностью. Но я полагаю, что я просто тупица.   -  person S.Lott    schedule 12.12.2010
comment
@ S.Lott: Определите свою собственную функцию, а затем попробуйте help (the_function) и посмотрите, что это даст вам. Не уверен, что лучше всего попробовать abs, у него может быть другое поведение из-за встроенной функции. Но когда я попробовал это с функцией, которую я определил, а также с функцией из сторонней библиотеки, он дал полную строку функции sig + doc.   -  person mindthief    schedule 13.12.2010


Ответы (1)


help(the_funcion) должен предоставить вам всю эту информацию.

Образец:

>>> help(enumerate)
Help on class enumerate in module __builtin__:

class enumerate(object)
 |  enumerate(iterable[, start]) -> iterator for index, value of iterable
 |
 |  Return an enumerate object.  iterable must be another object that supports
 |  iteration.  The enumerate object yields pairs containing a count (from
 |  start, which defaults to zero) and a value yielded by the iterable argument
 |  enumerate is useful for obtaining an indexed list:
 |      (0, seq[0]), (1, seq[1]), (2, seq[2]), ...
 |
 |  Methods defined here:
 |
 |  __getattribute__(...)
 |      x.__getattribute__('name') <==> x.name
 |
 |  __iter__(...)
 |      x.__iter__() <==> iter(x)
 |
 |  next(...)
 |      x.next() -> the next value, or raise StopIteration
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  __new__ = <built-in method __new__ of type object>
 |      T.__new__(S, ...) -> a new object with type S, a subtype of T
person Jochen Ritzel    schedule 12.12.2010
comment
Сработало как шарм, спасибо! Это другое решение из связанного вопроса также работает: import inspect print(inspect.getargspec(the_function)), но help () намного лучше! - person mindthief; 12.12.2010
comment
Я работаю с Python более 5 лет и не знал об этом. Фантастика! - person Régis B.; 10.03.2016