>>>import re
>>>import inspect
>>>print inspect.getsource(re.compile)def compile(pattern, flags=0):"Compile a regular expression pattern, returning a pattern object."return _compile(pattern, flags)
Esto va a trabajar en el modo interactivo, pero al parecer sólo en los objetos que se importan (no objetos definidos en el modo interactivo). Y, por supuesto, solo funcionará si Python puede encontrar el código fuente (por lo tanto, no en objetos integrados, bibliotecas C, archivos .pyc, etc.)
Las funciones que se crean en tiempo de ejecución (incluido el indicador interactivo) tampoco tienen un archivo o un número de línea, lo cual tiene sentido
John La Rooy
Eso parece ser lo que estaba buscando. ¡Gracias!
Eddie Welker
9
¿Qué hay de imprimir una definición de función que definí anteriormente en el intérprete interactivo de Python actual? es posible?
GL2014
@ GL2014: Sí, mira mi respuesta.
Mike McKerns
Puedo confirmar que esta respuesta y inspect.getsource () HACE trabajo sobre interactivo (ipython3) Funciton definido en Python 3.6.9 (Ubuntu).
Gnudiff
97
Si está usando iPython , puede usarfunction_name? para obtener ayuda e function_name??imprimirá la fuente, si es posible.
Un ejemplo roto allí, debería ser i.getsource (MyFunction).
svth
10
Si bien generalmente estoy de acuerdo en que inspectes una buena respuesta, no estoy de acuerdo en que no pueda obtener el código fuente de los objetos definidos en el intérprete. Si usa dill.source.getsourcefrom dill, puede obtener la fuente de funciones y lambdas, incluso si se definen de forma interactiva. También puede obtener el código de métodos y funciones de clase vinculados o no vinculados definidos en curries ... sin embargo, es posible que no pueda compilar ese código sin el código del objeto adjunto.
para muchas incorporaciones (como regla, funciones definidas en módulos C), también incluye la firma de la función, pero no en general.
u0b34a0f6ae
1
Mientras que en el shell interactivo, "ayuda (objeto)" mostrará esto de una manera más navegable.
TK.
@kaizer La firma de una función tampoco es una definición. Lo que __doc__realmente devuelve es lo que el autor del código puso en la cadena de documentos (la cadena entre comillas triples). Nada más y nada menos.
Tríptico
Creo que la definición es ambigua aquí. Para mí, podría significar la cadena de documentos o el texto del código o ambos o incluso el objeto de código en un tramo
John La Rooy
-6
Puede usar __doc__en la función, tome la hog()función como ejemplo: puede ver el uso de hog()esto:
from skimage.feature import hog
print hog.__doc__
La salida será:
ExtractHistogram of OrientedGradients(HOG)for a given image.Compute a Histogram of OrientedGradients(HOG) by
1.(optional)global image normalisation
2. computing the gradient image in x and y
3. computing gradient histograms
4. normalising across blocks
5. flattening into a feature vector
Parameters----------
image :(M, N) ndarray
Input image (greyscale).
orientations : int
Number of orientation bins.
pixels_per_cell :2 tuple (int, int)Size(in pixels) of a cell.
cells_per_block :2 tuple (int,int)Number of cells in each block.
visualise : bool, optional
Alsoreturn an image of the HOG.
transform_sqrt : bool, optional
Apply power law compression to normalise the image before
processing. DO NOT use this if the image contains negative
values.Also see `notes` section below.
feature_vector : bool, optional
Return the data as a feature vector by calling .ravel() on the result
just before returning.
normalise : bool, deprecated
The parameter is deprecated.Use`transform_sqrt`for power law
compression.`normalise` has been deprecated.Returns-------
newarr : ndarray
HOG for the image as a 1D(flattened) array.
hog_image : ndarray (if visualise=True)
A visualisation of the HOG image.References----------* http://en.wikipedia.org/wiki/Histogram_of_oriented_gradients*Dalal, N andTriggs, B,Histograms of OrientedGradientsforHumanDetection, IEEE ComputerSocietyConference on ComputerVisionandPatternRecognition2005SanDiego, CA, USA
Notes-----Power law compression, also known asGamma correction,is used to reduce
the effects of shadowing and illumination variations.The compression makes
the dark regions lighter.When the kwarg `transform_sqrt`is set to
``True``, the function computes the square root of each color channel
and then applies the hog algorithm to the image.
Respuestas:
Si está importando la función, puede usar
inspect.getsource
:Esto va a trabajar en el modo interactivo, pero al parecer sólo en los objetos que se importan (no objetos definidos en el modo interactivo). Y, por supuesto, solo funcionará si Python puede encontrar el código fuente (por lo tanto, no en objetos integrados, bibliotecas C, archivos .pyc, etc.)
fuente
Si está usando iPython , puede usar
function_name?
para obtener ayuda efunction_name??
imprimirá la fuente, si es posible.fuente
Esta es la forma en que descubrí cómo hacerlo:
Esto elimina los caracteres de la nueva línea e imprime la función muy bien
fuente
Si bien generalmente estoy de acuerdo en que
inspect
es una buena respuesta, no estoy de acuerdo en que no pueda obtener el código fuente de los objetos definidos en el intérprete. Si usadill.source.getsource
fromdill
, puede obtener la fuente de funciones y lambdas, incluso si se definen de forma interactiva. También puede obtener el código de métodos y funciones de clase vinculados o no vinculados definidos en curries ... sin embargo, es posible que no pueda compilar ese código sin el código del objeto adjunto.fuente
Utilizar
help(function)
para obtener la descripción de la función.Puedes leer más sobre
help()
aquí .fuente
Puede utilizar la palabra clave __doc__:
fuente
__doc__
realmente devuelve es lo que el autor del código puso en la cadena de documentos (la cadena entre comillas triples). Nada más y nada menos.Puede usar
__doc__
en la función, tome lahog()
función como ejemplo: puede ver el uso dehog()
esto:La salida será:
fuente