Python在运行时从函数中提取body

时间:2013-06-30 13:16:10

标签: python function

给定Python中的函数定义如下:

a = 3
b = 4
c = 5
def add():
    d = a+b+c

是否可以获得给我的代码对象或类似物:

a = 3
b = 4
c = 5
d = a+b+c

2 个答案:

答案 0 :(得分:5)

函数对象有一个与之关联的代码对象;你可以exec那个代码对象:

>>> a = 3
>>> b = 4
>>> c = 5
>>> def add():
...     d = a+b+c
... 
>>> exec add.func_code

这将但是在本地命名空间中设置d,因为它被编译为仅使用STORE_FAST创建本地名称操作码。您必须转换此字节码才能使用STORE_DEREF操作码,这需要您学习AST转换。

如果 希望沿着这条路走下去,那么请阅读Exploring Dynamic Scoping in Python,它会教你Python范围和字节代码的细节。

答案 1 :(得分:0)

您可以使用global命令 在我看来是最简单的方法

>>> a = 3
>>> b = 4
>>> c = 5
>>> def add():
        global d
...     d = a+b+c