gpt4 book ai didi

python - 解析 Python 文件并评估选定的函数

转载 作者:行者123 更新时间:2023-11-28 23:06:41 26 4
gpt4 key购买 nike

我有一个包含几个 python 函数的文件,每个函数都有一些语句。

def func1():
codeX...
def func2():
codeY...

codeX 和codeY 可以是多个语句。我希望能够解析文件,按名称查找函数,然后计算该函数中的代码。

使用 ast 模块,我可以解析文件,找到 FunctionDef 对象,并获取 Stmt 对象列表,但如何将其转换为可以传递给 eval 的字节码?我应该使用编译模块还是解析器模块?

基本上,函数 defs 只是用来创建单独的代码块。我希望能够获取给定名称的任何代码块,然后在 eval 中执行该代码(提供我自己的本地/全局范围对象)。如果有比我描述的更好的方法来做到这一点,那也会有所帮助。

谢谢

最佳答案

I want to be able to grab any block of code given the name and then execute that code ... (providing my own local/global scope objects).

一个天真的解决方案看起来像这样。这是基于函数并不都依赖于全局变量的假设。

from  file_that_contains_several_python_functions import *
Direction = some_value
func1()
func2()
func3()

应该完全按照您的意愿行事。

但是,如果您的所有函数都依赖于全局变量——一种让人想起 1970 年代 FORTRAN 的设计——那么您必须做一些稍微复杂一些的事情。

 from  file_that_contains_several_python_functions import *
Direction = some_value
func1( globals() )
func2( globals() )
func3( globals() )

而且您必须像这样重写所有使用全局的函数。

 def func1( context )
globals().update( context )
# Now you have access to all kinds of global variables

这看起来很丑陋,因为它确实如此。完全依赖全局变量的函数并不是最好的主意。

关于python - 解析 Python 文件并评估选定的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4650110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com