给定Python中的函数定义如下:
a = 3
b = 4
c = 5
def add():
d = a+b+c
是否可以获得给我的代码对象或类似物:
a = 3
b = 4
c = 5
d = a+b+c
答案 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