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.).
Funktionen, die zur Laufzeit erstellt werden (einschließlich der interaktiven Eingabeaufforderung), haben auch keine Datei oder Leinennummer, was Sinn macht
John La Rooy
Das scheint das zu sein, wonach ich gesucht habe. Vielen Dank!
Eddie Welker
9
Was ist mit dem Drucken einer Funktionsdefinition, die ich zuvor im aktuellen interaktiven Python-Interpreter definiert habe? Ist das möglich?
GL2014
@ GL2014: Ja, siehe meine Antwort.
Mike McKerns
Ich kann bestätigen , dass diese Antwort und inspect.getsource () DOES Arbeit auf der interaktiven (ipython3) definiert funciton in Python 3.6.9 (Ubuntu).
Gnudiff
97
Wenn Sie iPython verwenden , können Sie Hilfe anfordernfunction_name? und function_name??die Quelle ausdrucken, wenn dies möglich ist.
Manchmal müssen Sie die Funktion in eine andere Leitung aufteilen, um sie aufzurufen? zB model.function ?? funktioniert nicht, aber f = model.function; f ?? Werke
Thecheech
12
So habe ich herausgefunden, wie es geht:
import inspect as i
import sys
sys.stdout.write(i.getsource(MyFunction))
Dadurch werden die neuen Zeilenzeichen entfernt und die Funktion wird gut ausgedruckt
Ein gebrochenes Beispiel dort sollte es i.getsource (MyFunction) sein.
Svth
10
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.
Für viele integrierte Funktionen (in der Regel Funktionen, die in C-Modulen definiert sind) enthält es auch die Funktionssignatur, jedoch nicht generell.
u0b34a0f6ae
1
In der interaktiven Shell zeigt "help (object)" dies auf eine besser navigierbare Weise an.
TK.
@kaizer Eine Funktionssignatur ist ebenfalls keine Definition. Was __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.
Triptychon
Ich denke, die Definition ist hier nicht eindeutig. Für mich könnte es die Dokumentzeichenfolge oder den Code-Text oder beides oder sogar das Code-Objekt am Stück bedeuten
John La Rooy
-6
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:
ExtractHistogram of OrientedGradients(HOG)for a given image.Compute a Histogram of OrientedGradients(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
Alsoreturn 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 andTriggs, B,Histograms of OrientedGradientsforHumanDetection, IEEE ComputerSocietyConference on ComputerVisionandPatternRecognition2005SanDiego, CA, USA
Notes-----Power law compression, also known asGamma 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.
Antworten:
Wenn Sie die Funktion importieren, können Sie Folgendes verwenden
inspect.getsource
: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.).
quelle
Wenn Sie iPython verwenden , können Sie Hilfe anfordern
function_name?
undfunction_name??
die Quelle ausdrucken, wenn dies möglich ist.quelle
So habe ich herausgefunden, wie es geht:
Dadurch werden die neuen Zeilenzeichen entfernt und die Funktion wird gut ausgedruckt
quelle
Obwohl ich im Allgemeinen zustimmen würde, dass dies
inspect
eine gute Antwort ist, würde ich nicht zustimmen, dass Sie den Quellcode der im Interpreter definierten Objekte nicht erhalten können. Wenn Siedill.source.getsource
von verwendendill
, 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.quelle
Verwenden Sie
help(function)
diese Option , um die Funktionsbeschreibung abzurufen.Sie können mehr über lesen
help()
hier .quelle
Sie können das Schlüsselwort __doc__ verwenden:
quelle
__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 diehog()
Funktion als Beispiel: Sie können die Verwendung folgendermaßen sehenhog()
:Die Ausgabe wird sein:
quelle