Jika Anda mengimpor fungsi, Anda dapat menggunakan 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)
Ini akan bekerja di prompt interaktif, tetapi tampaknya hanya pada objek yang diimpor (bukan objek yang ditentukan dalam prompt interaktif). Dan tentu saja itu hanya akan berfungsi jika Python dapat menemukan kode sumbernya (jadi tidak pada objek bawaan, C libs, file .pyc, dll)
Fungsi yang dibuat saat runtime (termasuk prompt interaktif) juga tidak memiliki file atau nomor linen, yang masuk akal
John La Rooy
Sepertinya itulah yang saya cari. Terima kasih!
Eddie Welker
9
Bagaimana dengan mencetak definisi fungsi yang saya definisikan sebelumnya di interpreter Python interaktif saat ini? Apakah ini mungkin?
GL2014
@ GL2014: Ya, lihat jawaban saya.
Mike McKerns
Saya dapat mengonfirmasi bahwa jawaban ini dan inspect.getsource () TIDAK berfungsi pada fungsi yang didefinisikan secara interaktif (ipython3) di Python 3.6.9 (Ubuntu).
Gnudiff
97
Jika Anda menggunakan iPython , Anda dapat menggunakan function_name?untuk mendapatkan bantuan, dan function_name??akan mencetak sumbernya, jika bisa.
terkadang Anda perlu memisahkan fungsi ke baris lain untuk memanggil? misalnya model.function ?? tidak berfungsi tetapi f = model.function; f ?? bekerja
theecheech
12
Inilah cara saya menemukan cara melakukannya:
import inspect as i
import sys
sys.stdout.write(i.getsource(MyFunction))
Ini mengeluarkan karakter baris baru dan mencetak fungsinya dengan baik
Contoh rusak di sana, harus i.getsource (MyFunction).
svth
10
Meskipun saya umumnya setuju bahwa itu inspectadalah jawaban yang bagus, saya tidak setuju bahwa Anda tidak bisa mendapatkan kode sumber objek yang ditentukan di interpreter. Jika Anda menggunakan dill.source.getsourcefrom dill, Anda bisa mendapatkan sumber fungsi dan lambda, meskipun keduanya didefinisikan secara interaktif. Itu juga bisa mendapatkan kode untuk dari metode kelas terikat atau tidak terikat dan fungsi yang ditentukan dalam kari ... namun, Anda mungkin tidak dapat mengkompilasi kode itu tanpa kode objek yang melingkupinya.
kadang-kadang tidak bekerja secara langsung dengan: getsource (my_function) , tetapi kemudian saya bisa membuatnya berfungsi dengan getsource (my_function.func_code)
Afflatus
2
Gunakan help(function)untuk mendapatkan deskripsi fungsi.
untuk banyak bawaan (sebagai aturan, fungsi yang ditentukan dalam modul C), ini menyertakan tanda tangan fungsi juga, tetapi tidak secara umum.
u0b34a0f6ae
1
Sementara di shell interaktif "help (object)" akan menampilkan ini dengan cara yang lebih mudah dinavigasi.
TK.
@kaizer Tanda tangan fungsi juga bukan definisi. Apa yang __doc__sebenarnya dikembalikan adalah apa pun yang dimasukkan oleh pembuat kode ke dalam string doc (string yang dikutip tiga kali lipat). Tidak lebih, tidak kurang.
Triptych
Saya pikir definisi di sini ambigu. Bagi saya itu bisa berarti docstring atau teks kode atau keduanya atau bahkan objek kode sekaligus
John La Rooy
-6
Anda dapat menggunakan __doc__fungsi in, ambil hog()fungsi sebagai contoh: Anda dapat melihat penggunaan hog()seperti ini:
from skimage.feature import hog
print hog.__doc__
Outputnya adalah:
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.
Jawaban:
Jika Anda mengimpor fungsi, Anda dapat menggunakan
inspect.getsource
:Ini akan bekerja di prompt interaktif, tetapi tampaknya hanya pada objek yang diimpor (bukan objek yang ditentukan dalam prompt interaktif). Dan tentu saja itu hanya akan berfungsi jika Python dapat menemukan kode sumbernya (jadi tidak pada objek bawaan, C libs, file .pyc, dll)
sumber
Jika Anda menggunakan iPython , Anda dapat menggunakan
function_name?
untuk mendapatkan bantuan, danfunction_name??
akan mencetak sumbernya, jika bisa.sumber
Inilah cara saya menemukan cara melakukannya:
Ini mengeluarkan karakter baris baru dan mencetak fungsinya dengan baik
sumber
Meskipun saya umumnya setuju bahwa itu
inspect
adalah jawaban yang bagus, saya tidak setuju bahwa Anda tidak bisa mendapatkan kode sumber objek yang ditentukan di interpreter. Jika Anda menggunakandill.source.getsource
fromdill
, Anda bisa mendapatkan sumber fungsi dan lambda, meskipun keduanya didefinisikan secara interaktif. Itu juga bisa mendapatkan kode untuk dari metode kelas terikat atau tidak terikat dan fungsi yang ditentukan dalam kari ... namun, Anda mungkin tidak dapat mengkompilasi kode itu tanpa kode objek yang melingkupinya.sumber
Gunakan
help(function)
untuk mendapatkan deskripsi fungsi.Anda dapat membaca lebih lanjut di
help()
sini .sumber
Anda dapat menggunakan kata kunci __doc__:
sumber
__doc__
sebenarnya dikembalikan adalah apa pun yang dimasukkan oleh pembuat kode ke dalam string doc (string yang dikutip tiga kali lipat). Tidak lebih, tidak kurang.Anda dapat menggunakan
__doc__
fungsi in, ambilhog()
fungsi sebagai contoh: Anda dapat melihat penggunaanhog()
seperti ini:Outputnya adalah:
sumber