Если вы импортируете функцию, вы можете использовать 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, файлах .pyc и т. Д.)
Функции, которые создаются во время выполнения (включая интерактивную подсказку), также не имеют номера файла или белья, что имеет смысл
Джон Ла Рой,
Кажется, это то, что я искал. Спасибо!
Эдди Велкер,
9
А как насчет печати определения функции, которую я определил ранее в текущем интерактивном интерпретаторе Python? Это возможно?
GL2014,
@ GL2014: Да, посмотри мой ответ.
Майк МакКернс,
Я могу подтвердить, что этот ответ и inspect.getsource () ДЕЙСТВИТЕЛЬНО работают с интерактивной (ipython3) функцией, определенной в Python 3.6.9 (Ubuntu).
Gnudiff,
97
Если вы используете iPython , вы можете использовать его function_name?для получения справки и function_name??распечатать исходный код, если это возможно.
Здесь сломанный пример, это должен быть i.getsource (MyFunction).
svth
10
Хотя я в целом согласен, что inspectэто хороший ответ, я не согласен с тем, что вы не можете получить исходный код объектов, определенных в интерпретаторе. Если вы используете dill.source.getsourcefrom dill, вы можете получить источник функций и лямбда-выражений, даже если они определены интерактивно. Он также может получать код из связанных или несвязанных методов и функций класса, определенных в карри ... однако вы не сможете скомпилировать этот код без кода окружающего объекта.
для многих встроенных функций (как правило, функций, определенных в модулях C) он также включает сигнатуру функции, но не в целом.
u0b34a0f6ae
1
В интерактивной оболочке «help (object)» будет отображать это более удобным для навигации способом.
ТЗ.
@kaizer Сигнатура функции тоже не является определением. На __doc__самом деле возвращается то, что автор кода поместил в строку документа (строку в тройных кавычках). Ни больше ни меньше.
Триптих
Думаю, определение здесь неоднозначное. Для меня это может означать строку документации, или текст кода, или и то, и другое, или даже объект кода по отдельности
Джон Ла Рой,
-6
Вы можете использовать __doc__в функции, возьмите hog()функцию в качестве примера: Вы можете увидеть, hog()как это используется:
from skimage.feature import hog
print hog.__doc__
Результат будет:
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.
Ответы:
Если вы импортируете функцию, вы можете использовать
inspect.getsource
:Это будет работать в интерактивном приглашении, но, очевидно, только для импортируемых объектов (не для объектов, определенных в интерактивном приглашении). И, конечно, это будет работать только в том случае, если Python сможет найти исходный код (а не на встроенных объектах, библиотеках C, файлах .pyc и т. Д.)
источник
Если вы используете iPython , вы можете использовать его
function_name?
для получения справки иfunction_name??
распечатать исходный код, если это возможно.источник
Вот как я понял, как это сделать:
Это удаляет символы новой строки и красиво выводит функцию
источник
Хотя я в целом согласен, что
inspect
это хороший ответ, я не согласен с тем, что вы не можете получить исходный код объектов, определенных в интерпретаторе. Если вы используетеdill.source.getsource
fromdill
, вы можете получить источник функций и лямбда-выражений, даже если они определены интерактивно. Он также может получать код из связанных или несвязанных методов и функций класса, определенных в карри ... однако вы не сможете скомпилировать этот код без кода окружающего объекта.источник
Используйте
help(function)
для получения описания функции.Подробнее об этом можно прочитать
help()
здесь .источник
Вы можете использовать ключевое слово __doc__:
источник
__doc__
самом деле возвращается то, что автор кода поместил в строку документа (строку в тройных кавычках). Ни больше ни меньше.Вы можете использовать
__doc__
в функции, возьмитеhog()
функцию в качестве примера: Вы можете увидеть,hog()
как это используется:Результат будет:
источник