gpt4 book ai didi

python - 如何从函数中的exec返回值?

转载 作者:行者123 更新时间:2023-11-28 19:54:49 28 4
gpt4 key购买 nike

我尝试:

def test(w,sli):
s = "'{0}'{1}".format(w,sli)
exec(s)
return s

print test("TEST12344","[:2]")

它返回 'TEST12344'[:2]

如何从函数中的exec返回值

最佳答案

考虑运行以下代码。

code = """
def func():
print("std out")
return "expr out"
func()
"""

在 Python 控制台上

如果您在 python 控制台上运行 func(),输出将类似于:

>>> def func():
... print("std out")
... return "expr out"
...
>>> func()
std out
'expr out'

与执行

>>> exec(code)
std out
>>> print(exec(code))
std out
None

如您所见,返回值为 None。

评估

>>> eval(code)

会产生错误。

所以我做了我的 exec_with_return()

import ast
import copy
def convertExpr2Expression(Expr):
Expr.lineno = 0
Expr.col_offset = 0
result = ast.Expression(Expr.value, lineno=0, col_offset = 0)

return result
def exec_with_return(code):
code_ast = ast.parse(code)

init_ast = copy.deepcopy(code_ast)
init_ast.body = code_ast.body[:-1]

last_ast = copy.deepcopy(code_ast)
last_ast.body = code_ast.body[-1:]

exec(compile(init_ast, "<ast>", "exec"), globals())
if type(last_ast.body[0]) == ast.Expr:
return eval(compile(convertExpr2Expression(last_ast.body[0]), "<ast>", "eval"),globals())
else:
exec(compile(last_ast, "<ast>", "exec"),globals())

exec_with_return(code)

关于python - 如何从函数中的exec返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33409207/

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