重复..
我有一个成功运行的方法定义,但想在运行时修改它。
例如: 如果我有方法
def sayHello():
print "Hello"
type(sayHello)给出了答案'type function'。我能获取此函数对象的源代码字符串吗?它被认为是一个安全问题吗?
答案 0 :(得分:18)
使用检查模块:
import inspect
import mymodule
print inspect.getsource(mymodule.sayHello)
必须在导入的模块中定义该函数。
答案 1 :(得分:2)
sayHello.func_code.co_code
返回一个字符串,我认为该字符串包含该方法的已编译代码。由于Python在内部将代码编译为虚拟机字节码,因此可能就是这样。
你可以反汇编它:
import dis
def sayHello():
print "hello"
dis.dis(sayHello)
打印:
1 0 LOAD_CONST 1 ('hello') 3 PRINT_ITEM 4 PRINT_NEWLINE 5 LOAD_CONST 0 (None) 8 RETURN_VALUE
请查看Decompyle以进行反编译。
答案 2 :(得分:2)
要在类实例上获取方法的源,请执行以下操作:
import inspect
myobj = MyModel()
print inspect.getsource(myobj.my_method)
了解详情:https://docs.python.org/2/library/inspect.html#inspect.getsource
答案 3 :(得分:0)
没有内置函数来获取函数的源代码,但是,如果您可以访问源代码(它将在您的Python / lib目录中),您可以构建自己的函数。