提问人:Shaun Han 提问时间:10/11/2023 最后编辑:Shaun Han 更新时间:10/11/2023 访问量:37
如何在Python中获取exec()定义的可调用函数?
How to get the callable function defined by exec() in Python?
问:
假设我想要一个函数,该函数可以执行任何输入值为 10 的用户定义函数。用户应该通过字符串定义函数,如下所示:exec_myfunc
func1_str = """
def myfunc1(x):
return x
"""
func2_str = """
def myfunc2(x):
return x**2
"""
现在我使用一种非常笨拙的方法,通过使用正则表达式提取函数名称,如下所示:def
(
def exec_myfunc(func_str: str):
import re
exec(func_str)
myfunc_str = re.search(r'def(.*)\(', func_str).group(1).strip()
return eval(myfunc_str)(10)
print(exec_myfunc(func1_str))
# 10
print(exec_myfunc(func2_str))
# 100
我想知道这是什么一般和正确的方法?
答:
2赞
Andrej Kesely
10/11/2023
#1
你可以使用 ast
模块解析 python 字符串,然后找到函数名称:
import ast
func1 = """
def myfunc1(x):
return x
"""
parsed_func = ast.parse(func1)
for node in ast.walk(parsed_func):
if isinstance(node, ast.FunctionDef):
function_name = node.name
break
print("Function name:", function_name)
指纹:
Function name: myfunc1
1赞
Onyambu
10/11/2023
#2
您可以直接使用:exec
def exec_myfunc(func_str: str):
fun = {} # to hold your function
exec(func_str,fun)
fun_name = list(fun.keys())[1]
fn = fun[fun_name]
print(f"The function {fun_name} evaluated at 10 = {fn(10)}")
exec_myfunc(func1_str)
The function myfunc1 evaluated at 10 = 10
评论