En JavaScript, se puede imprimir la definición de una función. ¿Hay alguna forma de lograr esto en Python?
(Solo estaba jugando en modo interactivo y quería leer un módulo sin open (). Solo tenía curiosidad).
En JavaScript, se puede imprimir la definición de una función. ¿Hay alguna forma de lograr esto en Python?
(Solo estaba jugando en modo interactivo y quería leer un módulo sin open (). Solo tenía curiosidad).
Respuestas:
Si está importando la función, puede usar inspect.getsource:
>>> 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.)
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.
>>> from dill.source import getsource
>>>
>>> def add(x,y):
... return x+y
...
>>> squared = lambda x:x**2
>>>
>>> print getsource(add)
def add(x,y):
return x+y
>>> print getsource(squared)
squared = lambda x:x**2
>>>
>>> class Foo(object):
... def bar(self, x):
... return x*x+x
...
>>> f = Foo()
>>>
>>> print getsource(f.bar)
def bar(self, x):
return x*x+x
>>>
Puede utilizar la palabra clave __doc__:
#print the class description
print string.__doc__
#print function description
print open.__doc__
__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 la hog()función como ejemplo: puede ver el uso de hog()esto:
from skimage.feature import hog
print hog.__doc__
La salida será:
Extract Histogram of Oriented Gradients (HOG) for a given image.
Compute a Histogram of Oriented Gradients (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
Also return 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 and Triggs, B, Histograms of Oriented Gradients for
Human Detection, IEEE Computer Society Conference on Computer
Vision and Pattern Recognition 2005 San Diego, CA, USA
Notes
-----
Power law compression, also known as Gamma 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.