5

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

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

是否有可能获得一个代码对象或类似的东西给我:

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

2 回答 2

6

函数对象有一个与之关联的代码对象;您可以exec使用该代码对象:

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

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

如果您确实想走这条路,那么请阅读在 Python 中探索动态范围,它教您 Python 范围和字节码的来龙去脉。

于 2013-06-30T13:19:04.730 回答
0

你可以使用global命令,这是我认为最简单的方法

>>> a = 3
>>> b = 4
>>> c = 5
>>> def add():
        global d
...     d = a+b+c
于 2013-06-30T13:23:39.867 回答