ใน JavaScript เราสามารถพิมพ์นิยามของฟังก์ชันได้ มีวิธีทำให้สำเร็จใน Python หรือไม่?
(แค่เล่นในโหมดโต้ตอบและฉันต้องการอ่านโมดูลโดยไม่ต้องเปิด () ฉันแค่อยากรู้)
ใน JavaScript เราสามารถพิมพ์นิยามของฟังก์ชันได้ มีวิธีทำให้สำเร็จใน Python หรือไม่?
(แค่เล่นในโหมดโต้ตอบและฉันต้องการอ่านโมดูลโดยไม่ต้องเปิด () ฉันแค่อยากรู้)
คำตอบ:
หากคุณกำลังนำเข้าฟังก์ชันคุณสามารถใช้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 libs, ไฟล์. pyc ฯลฯ )
นี่คือวิธีที่ฉันคิดว่าจะทำอย่างไร:
import inspect as i
import sys
sys.stdout.write(i.getsource(MyFunction))
สิ่งนี้จะนำอักขระบรรทัดใหม่ออกมาและพิมพ์ฟังก์ชันออกมาอย่างสวยงาม
แม้ว่าโดยทั่วไปฉันจะยอมรับว่าinspectเป็นคำตอบที่ดี แต่ฉันไม่เห็นด้วยที่คุณไม่สามารถรับซอร์สโค้ดของวัตถุที่กำหนดไว้ในล่ามได้ หากคุณใช้dill.source.getsourceจากdillคุณจะได้รับแหล่งที่มาของฟังก์ชันและแลมบ์ดาแม้ว่าจะถูกกำหนดแบบโต้ตอบก็ตาม นอกจากนี้ยังสามารถรับรหัสจากเมธอดคลาสที่ถูกผูกไว้หรือไม่ถูกผูกไว้และฟังก์ชันที่กำหนดไว้ในแกง ... อย่างไรก็ตามคุณอาจไม่สามารถคอมไพล์โค้ดนั้นได้หากไม่มีโค้ดของอ็อบเจ็กต์ล้อมรอบ
>>> 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
>>>
คุณสามารถใช้คีย์เวิร์ด __doc__:
#print the class description
print string.__doc__
#print function description
print open.__doc__
__doc__ จริงคือสิ่งที่ผู้เขียนโค้ดใส่ในสตริง doc (สตริงที่ยกมาสามตัว) ไม่มีอะไรมากไม่มีอะไรน้อย
คุณสามารถใช้__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.