Función de “ayuda” de Python: impresión de cadenas de documentación

¿Hay una opción para imprimir la salida de ayuda (‘myfun’). El comportamiento que estoy viendo es que la salida se imprime en std.out y la secuencia de comandos espera la entrada del usuario (es decir, escriba ‘q’ para continuar).

Debe haber una configuración para configurar esto solo para volcar cadenas de documentos.

Alternativamente, si pudiera simplemente volcar la cadena de documentación MÁS la línea “def f (args):”, eso también estaría bien.

La búsqueda de la “función de ayuda de Python” es cómica. 🙂 Tal vez me esté perdiendo una buena página de pydoc en algún lugar que lo explique todo.

Para obtener exactamente la ayuda que se imprime con help(str) en la variable strhelp :

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

Por supuesto que luego puede imprimirlo fácilmente sin paginación, etc.

Si desea acceder a la cadena de documentos en bruto desde el código:

  myvar = obj.__doc__ print(obj.__doc__) 

La función de ayuda realiza un procesamiento adicional, la respuesta aceptada muestra cómo replicar esto con pydoc.render_doc ().

Ya has visto una referencia a la cadena de documentación, la variable magic __doc__ que contiene el cuerpo de la ayuda:

 def foo(a,b,c): ''' DOES NOTHING!!!! ''' pass print foo.__doc__ # DOES NOTHING!!!! 

Para obtener el nombre de una función, simplemente use __name__ :

 def foo(a,b,c): pass print foo.__name__ # foo 

La forma de obtener la firma de una función que no está incorporada puede utilizar la propiedad func_code y desde allí puede leer sus co_varnames:

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

No he descubierto cómo hacer lo mismo para las funciones integradas.

 >>> 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.' 

¿Es eso lo que necesitabas?

Editar: puede print(x.__doc__) y, en relación con la firma de la función, puede print(x.__doc__) utilizando el módulo de 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