deffoo(arg1,arg2): #do something with args a = arg1 + arg2 return a
Но я считаю, что если функция скомпилирована из строки, потока или импортирована из скомпилированного файла, то вы не сможете получить ее исходный код.
Ответ 2
В модуле inspect есть методы для извлечения исходного кода из объектов python. По-видимому, это работает, только если исходный код находится в файле. Если бы у вас это было, я думаю, вам не нужно было бы получать исходный код из объекта.
Следующие тесты inspect.getsource(foo) с использованием Python 3.6:
import inspect
deffoo(arg1,arg2): #do something with args a = arg1 + arg2 return a
source_foo = inspect.getsource(foo) # foo is normal function print(source_foo)
source_max = inspect.getsource(max) # max is a built-in function print(source_max)
Сначала выводится:
deffoo(arg1,arg2): #do something with args a = arg1 + arg2 return a
Затем происходит сбой на inspect.getsource(max) со следующей ошибкой:
TypeError: <built-in function max> isnot a module, class, method, function, traceback, frame, or code object
Ответ 3
IPython
Примечание: этот ответ применим только к IPython и проектам, которые его используют, таким как Jupyter.
Просто используйте foo?? или ??foo.
Если вы используете IPython, то вам нужно ввести foo?? или ??foo, чтобы увидеть полный исходный код. Чтобы увидеть в функции только строку документации, используйте foo? или ?foo. Это работает и в Jupyter notebook.
In [19]: foo?? Signature: foo(arg1, arg2) Source: deffoo(arg1,arg2): #do something with args a = arg1 + arg2 return a
File: ~/Desktop/<ipython-input-18-3174e3126506> Type: function