【问题标题】:eval for functions and beyond [duplicate]评估功能及其他[重复]
【发布时间】:2025-12-03 19:50:02
【问题描述】:

我最近一直在尝试一些程序合成。 在这里,我正在生成代表有效函数的字符串。我当前的解决方案包括将字符串打印到标准输出,将它们存储到文件中,然后从其他地方调用该文件。 但是,函数可以直接导入给定的命名空间吗? 假设以下示例:

def sum2(x):
    return sum(x)

print(sum2([1,2,3]))


sstring = """
def sum3(x):
    return sum(x)
"""

eval(sstring)
print(sum3([1,2,3]))

是否有可能像第二部分(不起作用)? eval() 是否仅限于原始表达式?

【问题讨论】:

  • eval 仅适用于表达式(评估为值的事物,即可以分配给变量的事物 x = <some arbitrary expressions>),exec 接受任意语句

标签: python eval


【解决方案1】:

eval 的大哥exec 会在这里为您提供帮助。

def sum2(x):
    return sum(x)

print(sum2([1,2,3]))


sstring = """
def sum3(x):
    return sum(x)
"""

exec(sstring)
print(sum3([1,2,3]))

【讨论】:

    【解决方案2】:

    如果你编译它就可以工作:

    eval(compile(sstring, '', 'single'))
    

    Demo at repl.it.

    【讨论】: