>>>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)
Działa to w zgłoszeniu interaktywnym, ale najwyraźniej tylko w przypadku importowanych obiektów (a nie obiektów zdefiniowanych w monicie interaktywnym). I oczywiście zadziała tylko wtedy, gdy Python może znaleźć kod źródłowy (a więc nie w przypadku obiektów wbudowanych, bibliotek C, plików .pyc itp.)
Zepsuty przykład, powinien to być i.getsource (MyFunction).
svth
10
Chociaż generalnie zgadzam się, że inspectjest to dobra odpowiedź, nie zgodziłbym się, że nie można uzyskać kodu źródłowego obiektów zdefiniowanych w interpreterze. Jeśli używasz dill.source.getsourcefrom dill, możesz uzyskać źródło funkcji i lambd, nawet jeśli są zdefiniowane interaktywnie. Może również pobrać kod z powiązanych lub niezwiązanych metod klas i funkcji zdefiniowanych w curry ... jednak może nie być w stanie skompilować tego kodu bez kodu otaczającego obiektu.
w przypadku wielu wbudowanych (z reguły funkcji zdefiniowanych w modułach C) zawiera również sygnaturę funkcji, ale nie ogólnie.
u0b34a0f6ae
1
Będąc w powłoce interaktywnej, „pomoc (obiekt)” wyświetli to w bardziej przyjazny dla nawigacji sposób.
TK.
@kaizer Podpis funkcji również nie jest definicją. To, co w __doc__rzeczywistości zwraca, to cokolwiek, co autor kodu umieścił w ciągu dokumentacyjnym (ciąg potrójny cudzysłów). Nic dodać nic ująć.
Tryptyk
Myślę, że definicja jest tutaj niejednoznaczna. Dla mnie może to oznaczać ciąg dokumentacyjny lub tekst kodu lub oba, a nawet obiekt kodu na odcinku
John La Rooy
-6
Możesz użyć funkcji __doc__w funkcji, weź hog()funkcję jako przykład: Możesz zobaczyć użycie w hog()ten sposób:
from skimage.feature import hog
print hog.__doc__
Wynik będzie:
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.
Odpowiedzi:
Jeśli importujesz funkcję, możesz użyć
inspect.getsource
:Działa to w zgłoszeniu interaktywnym, ale najwyraźniej tylko w przypadku importowanych obiektów (a nie obiektów zdefiniowanych w monicie interaktywnym). I oczywiście zadziała tylko wtedy, gdy Python może znaleźć kod źródłowy (a więc nie w przypadku obiektów wbudowanych, bibliotek C, plików .pyc itp.)
źródło
Jeśli używasz iPythona , możesz użyć,
function_name?
aby uzyskać pomoc ifunction_name??
wydrukuje źródło, jeśli to możliwe.źródło
Oto sposób, w jaki odkryłem, jak to zrobić:
To usuwa znaki nowego wiersza i ładnie wypisuje funkcję
źródło
Chociaż generalnie zgadzam się, że
inspect
jest to dobra odpowiedź, nie zgodziłbym się, że nie można uzyskać kodu źródłowego obiektów zdefiniowanych w interpreterze. Jeśli używaszdill.source.getsource
fromdill
, możesz uzyskać źródło funkcji i lambd, nawet jeśli są zdefiniowane interaktywnie. Może również pobrać kod z powiązanych lub niezwiązanych metod klas i funkcji zdefiniowanych w curry ... jednak może nie być w stanie skompilować tego kodu bez kodu otaczającego obiektu.źródło
Użyj,
help(function)
aby uzyskać opis funkcji.Możesz przeczytać więcej na ten temat
help()
tutaj .źródło
Możesz użyć słowa kluczowego __doc__:
źródło
__doc__
rzeczywistości zwraca, to cokolwiek, co autor kodu umieścił w ciągu dokumentacyjnym (ciąg potrójny cudzysłów). Nic dodać nic ująć.Możesz użyć funkcji
__doc__
w funkcji, weźhog()
funkcję jako przykład: Możesz zobaczyć użycie whog()
ten sposób:Wynik będzie:
źródło