Python可以打印函数定义吗?

时间:2009-10-13 20:33:35

标签: python

在JavaScript中,可以打印出函数的定义。有没有办法在Python中实现这一目标?

(只是在交互模式下玩游戏,我想在没有打开的情况下读取模块()。我只是很好奇)。

7 个答案:

答案 0 :(得分:122)

如果要导入该功能,可以使用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)

在交互式提示中工作,但显然仅适用于导入的对象(不是交互式提示中定义的对象)。当然,只有Python可以找到源代码(因此不能在内置对象,C库,.pyc文件等上),它才会起作用。

答案 1 :(得分:83)

如果您使用的是iPython,则可以使用 function_name? 获取帮助, function_name?? 将打印出来来源,如果可以的话。

答案 2 :(得分:8)

虽然我普遍认为inspect是一个很好的答案,但我不同意您无法获得解释器中定义的对象的源代码。如果您使用dill中的dill.source.getsource,则可以获得函数和lambdas的来源,即使它们是以交互方式定义的。 它还可以从curries中定义的绑定或非绑定类方法和函数中获取代码...但是,如果没有封闭对象的代码,您可能无法编译该代码。

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

>>> 

答案 3 :(得分:6)

这是我弄清楚如何做的方式:

    import inspect as i
    import sys
    sys.stdout.write(i.getsource(MyFunction))

这将取出新的行字符并很好地打印出该函数

答案 4 :(得分:0)

使用help(function)获取功能说明。

答案 5 :(得分:-5)

您可以使用__doc__关键字:

#print the class description
print string.__doc__
#print function description
print open.__doc__

答案 6 :(得分:-5)

您可以在函数中使用__doc__,以hog()函数为例: 你可以看到hog()的用法:

from skimage.feature import hog

print hog.__doc__

输出将是:

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.