【问题标题】:How to use eval to run other python script with argument?如何使用 eval 运行其他带参数的 python 脚本?
【发布时间】:2020-07-05 15:19:19
【问题描述】:

我有一个包含代码的python文件a.py:

var=50*10
data= # eval here to call add function of b.py with argument var
print(data)

和 b.py 包含代码:

def add(h):
    res=h+10
    return res

现在我想要的是使用 eval 从带有参数的 a.py python 脚本调用 b.py 的运行函数并获得结果。 但我无法理解 eval 在这里的工作原理。我看过 python 官方文档,它们超出了我的理解。 或者如果不是 eval 那么其他选项是什么(使用其他文件作为模块除外)

【问题讨论】:

  • 通常的做法是import bdata = b.add(var) - 你永远不需要 eval 来做任何事情。
  • 是的,我知道将文件作为模块导入可以工作,但还有其他方法可以提供帮助吗?
  • 您在导入时有任何问题吗?也许我们可以尝试解决这个问题?

标签: python python-3.x subprocess eval


【解决方案1】:

eval() 是一种仅用于评估 expressions 的方法。因此,您不能使用其他statements。由于import是语句,所以不能在eval()中使用。

其他选项是什么(除了使用其他文件作为模块)

exec() 与 import 一起使用,因此 exec()eval() 的组合可以使用:

var = 50 * 10
exec("import b")
data = eval("b.add(var)")
print(data)

甚至exec() 没有eval()

var = 50 * 10
exec("import b\ndata=b.add(var)")
print(data)

注意:

  • IDE 可能会抱怨 data 在最新版本的代码中未定义
  • exec()eval() 更危险

【讨论】:

    【解决方案2】:

    你只需要这样写:))

    def add(h):
        res=h+10
        return res
    
    var=50*10
    
    data = eval('add(var)')
    print(data)
    

    【讨论】:

    • 但我的函数在不同的文件中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2012-08-21
    • 1970-01-01
    相关资源
    最近更新 更多