代码之家  ›  专栏  ›  技术社区  ›  David542

如何获取exec的返回值?

  •  -2
  • David542  · 技术社区  · 4 年前

    我将如何执行以下操作:

    >>> new=exec('i=100;2 if i > 4 else 3')
    >>> repr(new)
    'None'
    

    我想得到 2 :

    >>> i=100
    >>> 2 if i>4 else 3
    2
    

    我可以用 eval ,只要没有作业:

    >>> new=eval('2 if i>4 else 3')
    >>> new
    2
    

    换言之,如何执行一个字符串代码(使用赋值,而不仅仅是 评估 )得到最后一部分了吗?


    这里有一个5年前的相关问题:不确定答案是否仍然适用,或者从那以后有什么变化: How do I get the return value when using Python exec on the code object of a function? .

    2 回复  |  直到 4 年前
        1
  •  1
  •   tdelaney    4 年前

    你可以通过一个 dict 用于全局命名空间。将结果赋给一个全局变量,您可以稍后读取它。

    >>> data = {}
    >>> exec('i=100;result = 2 if i > 4 else 3', data)
    >>> data['result']
    2
    

    默认情况下 exec 使用模块的命名空间。如果您不介意exec脚本的变量与您自己的变量相混淆,您可以将全局dict排除在外。

    >>> exec('i=100;result = 2 if i > 4 else 3')
    >>> result
    2
    

    您还可以使用两个字典,一个用于全局,一个用于局部,您创建的变量最终将位于后者。

    >>> data1={}
    >>> data2={}
    >>> exec('i=100;result = 2 if i > 4 else 3', data1, data2)
    >>> data2
    {'i': 100, 'result': 2}
    

    请注意,在执行的脚本中创建的所有变量都将在名称空间字典中结束。

        2
  •  1
  •   John Zwinck    4 年前

    用分号分成两部分:

    exec('i=100')
    new=eval('2 if i>4 else 3')