Dalam JavaScript, seseorang dapat mencetak definisi suatu fungsi. Apakah ada cara untuk melakukannya dengan Python?
(Hanya bermain-main dalam mode interaktif, dan saya ingin membaca modul tanpa open (). Saya hanya penasaran).
Dalam JavaScript, seseorang dapat mencetak definisi suatu fungsi. Apakah ada cara untuk melakukannya dengan Python?
(Hanya bermain-main dalam mode interaktif, dan saya ingin membaca modul tanpa open (). Saya hanya penasaran).
Jawaban:
Jika Anda mengimpor fungsi, Anda dapat menggunakan 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)
Ini akan bekerja di prompt interaktif, tetapi tampaknya hanya pada objek yang diimpor (bukan objek yang ditentukan dalam prompt interaktif). Dan tentu saja itu hanya akan berfungsi jika Python dapat menemukan kode sumbernya (jadi tidak pada objek bawaan, C libs, file .pyc, dll)
Jika Anda menggunakan iPython , Anda dapat menggunakan function_name?untuk mendapatkan bantuan, dan function_name??akan mencetak sumbernya, jika bisa.
Meskipun saya umumnya setuju bahwa itu inspectadalah jawaban yang bagus, saya tidak setuju bahwa Anda tidak bisa mendapatkan kode sumber objek yang ditentukan di interpreter. Jika Anda menggunakan dill.source.getsourcefrom dill, Anda bisa mendapatkan sumber fungsi dan lambda, meskipun keduanya didefinisikan secara interaktif. Itu juga bisa mendapatkan kode untuk dari metode kelas terikat atau tidak terikat dan fungsi yang ditentukan dalam kari ... namun, Anda mungkin tidak dapat mengkompilasi kode itu tanpa kode objek yang melingkupinya.
>>> 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
>>>
Anda dapat menggunakan kata kunci __doc__:
#print the class description
print string.__doc__
#print function description
print open.__doc__
__doc__ sebenarnya dikembalikan adalah apa pun yang dimasukkan oleh pembuat kode ke dalam string doc (string yang dikutip tiga kali lipat). Tidak lebih, tidak kurang.
Anda dapat menggunakan __doc__fungsi in, ambil hog()fungsi sebagai contoh: Anda dapat melihat penggunaan hog()seperti ini:
from skimage.feature import hog
print hog.__doc__
Outputnya adalah:
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.