Trong JavaScript, người ta có thể in ra định nghĩa của một hàm. Có cách nào để thực hiện điều này bằng Python không?
(Chỉ chơi xung quanh trong chế độ tương tác, và tôi muốn đọc một mô-đun mà không cần mở (). Tôi chỉ tò mò).
Trong JavaScript, người ta có thể in ra định nghĩa của một hàm. Có cách nào để thực hiện điều này bằng Python không?
(Chỉ chơi xung quanh trong chế độ tương tác, và tôi muốn đọc một mô-đun mà không cần mở (). Tôi chỉ tò mò).
Câu trả lời:
Nếu bạn đang nhập hàm, bạn có thể sử dụng 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)
Điều này sẽ hoạt động trong dấu nhắc tương tác, nhưng dường như chỉ trên các đối tượng được nhập (không phải các đối tượng được xác định trong dấu nhắc tương tác). Và tất nhiên nó sẽ chỉ hoạt động nếu Python có thể tìm thấy mã nguồn (vì vậy không phải trên các đối tượng tích hợp sẵn, C libs, tệp .pyc, v.v.)
Mặc dù tôi thường đồng ý rằng đó inspectlà một câu trả lời tốt, nhưng tôi không đồng ý rằng bạn không thể lấy mã nguồn của các đối tượng được xác định trong trình thông dịch. Nếu bạn sử dụng dill.source.getsourcetừ dill, bạn có thể lấy nguồn của các hàm và lambdas, ngay cả khi chúng được định nghĩa tương tác. Nó cũng có thể lấy mã từ các phương thức và chức năng của lớp có ràng buộc hoặc không liên kết được định nghĩa trong curries ... tuy nhiên, bạn có thể không biên dịch được mã đó nếu không có mã của đối tượng đi kèm.
>>> 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
>>>
Bạn có thể sử dụng từ khóa __doc__:
#print the class description
print string.__doc__
#print function description
print open.__doc__
__doc__ thực sự trả về là bất cứ điều gì mà tác giả của mã đặt trong chuỗi doc (chuỗi được trích dẫn ba). Không hơn không kém.
Bạn có thể sử dụng hàm __doc__trong, lấy hog()chức năng làm ví dụ: Bạn có thể xem cách sử dụng hog()như sau:
from skimage.feature import hog
print hog.__doc__
Đầu ra sẽ là:
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.