【发布时间】:2014-02-01 17:24:03
【问题描述】:
我正在做基因编程框架,我需要能够执行一些代表完整 python 程序的字符串。我正在使用 Python 2.7。我有一个配置类,其中定义了原始集。让我们说
class Foo():
def a(self,x):
return x
def b(self,y):
return y
我正在使用 python 检查模块提取函数,并且我想创建一些包含导入和所有内容的可执行源代码。我最终得到一个看起来像这样的字符串
import sys
def a(x,y):
return x
def b(y):
return y
def main(x,y)
lambda x,y: a(b(y),a(x,y))
main(*sys.argv)
我的问题是我不知道如何将命令行参数传递给我正在使用eval() 运行的字符串。 如何将命令行参数传递给我想使用eval() 运行的源文件?
编辑:有数以百万计的人,因此写入文件不是一个好选择。
编辑:我犯了一个错误。 eval() 方法仅用于表达式而不是语句,因此使用 exec() 是正确的方法
【问题讨论】:
-
您到底想
eval做什么?此外,您的课程定义没有 self 作为第一个参数。 -
“执行个人”一词中的“个人”是什么意思?
-
@Dan 我认为他在杀人……从基因上讲。哎呀!
-
您可以使用部分或动态创建的函数/代码对象来实现某些东西,但是如果您想坚持使用字符串和
eval构建东西,只需将您的字符串设置为Formatter并运行@ 987654328@ 关于格式化字符串的迭代。 -
a和b如何从Foo()中提取出来?顺便说一句,您的a()签名不合适。由于 Python 中的方法和函数是一等对象,因此您可以存储对它们的引用并根据需要调用它们,而无需为此使用eval()。
标签: python code-generation eval argument-passing