给定Python中的函数定义如下:
a = 3
b = 4
c = 5
def add():
d = a+b+c
Run Code Online (Sandbox Code Playgroud)
是否有可能获得一个代码对象或类似物给我:
a = 3
b = 4
c = 5
d = a+b+c
Run Code Online (Sandbox Code Playgroud)
函数对象有一个与之关联的代码对象; 你可以exec
那个代码对象:
>>> a = 3
>>> b = 4
>>> c = 5
>>> def add():
... d = a+b+c
...
>>> exec add.func_code
Run Code Online (Sandbox Code Playgroud)
但是,这不会d
在本地名称空间中设置,因为它被编译为仅使用操作码创建本地名称STORE_FAST
.您必须转换此字节码才能使用STORE_DEREF
操作码,这需要您学习AST转换.
如果您确实想要沿着这条路走下去,那么请阅读Python中的探索动态范围,它将教您Python范围和字节代码的细节.
归档时间: |
|
查看次数: |
234 次 |
最近记录: |