In JavaScript kann man die Definition einer Funktion ausdrucken. Gibt es eine Möglichkeit, dies in Python zu erreichen?
(Ich habe nur im interaktiven Modus herumgespielt und wollte ein Modul ohne open () lesen. Ich war nur neugierig).
In JavaScript kann man die Definition einer Funktion ausdrucken. Gibt es eine Möglichkeit, dies in Python zu erreichen?
(Ich habe nur im interaktiven Modus herumgespielt und wollte ein Modul ohne open () lesen. Ich war nur neugierig).
Antworten:
Wenn Sie die Funktion importieren, können Sie Folgendes verwenden 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)
Dies wird in der interaktiven Eingabeaufforderung arbeiten, aber anscheinend nur auf Objekte , die importiert werden (nicht in der interaktiven Eingabeaufforderung definiert Objekte). Und natürlich funktioniert es nur, wenn Python den Quellcode finden kann (also nicht für integrierte Objekte, C-Bibliotheken, .pyc-Dateien usw.).
Wenn Sie iPython verwenden , können Sie Hilfe anfordernfunction_name? und function_name??die Quelle ausdrucken, wenn dies möglich ist.
Obwohl ich im Allgemeinen zustimmen würde, dass dies inspecteine gute Antwort ist, würde ich nicht zustimmen, dass Sie den Quellcode der im Interpreter definierten Objekte nicht erhalten können. Wenn Sie dill.source.getsourcevon verwenden dill, können Sie die Quelle von Funktionen und Lambdas abrufen, auch wenn diese interaktiv definiert sind. Es kann auch den Code für gebundene oder ungebundene Klassenmethoden und -funktionen abrufen, die in Currys definiert sind. Möglicherweise können Sie diesen Code jedoch nicht ohne den Code des umschließenden Objekts kompilieren.
>>> 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
>>>
Sie können das Schlüsselwort __doc__ verwenden:
#print the class description
print string.__doc__
#print function description
print open.__doc__
__doc__ tatsächlich zurückgegeben wird, ist der Autor des Codes, der in die Dokumentzeichenfolge (die dreifach in Anführungszeichen gesetzte Zeichenfolge) eingegeben wurde. Nicht mehr, nicht weniger.
Sie können die __doc__in der Funktion verwenden, nehmen Sie die hog()Funktion als Beispiel: Sie können die Verwendung folgendermaßen sehen hog():
from skimage.feature import hog
print hog.__doc__
Die Ausgabe wird sein:
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.