python - 从 YAML 文件传递 Python 函数
问题描述
我有一个 YAML 脚本,用户可以在其中定义一些参数。他们还可以在 YAML 文件中声明他们想要应用的自定义函数。例如:
processes:
args1: 10
args2: 5
funct: np.sum
此 YAML 将传递给如下函数:
def custom_func(args1, args2, funct):
return funct(args1, args2)
对于上面的 YAML 示例,我希望custom_func()
执行np.sum(10,5)
. 如何使 YAML 文件中的数据被解析为 Callable?eval()
可能做的工作,但它可能有安全问题。有什么合适的方法吗?谢谢!
解决方案
您还可以加载给定 Python 虚线路径的函数。
但是,这只是获取函数并调用它,它不会尝试找出调用签名,即np.sum([5,10])
不是np.sum(10,5)
from yaml import safe_load as yload
from importlib import import_module
def load_func(dotpath : str):
""" load function in module. function is right-most segment """
module_, func = dotpath.rsplit(".", maxsplit=1)
m = import_module(module_)
return getattr(m, func)
yaml = """
processes:
args1: 10
args2: 5
#gotta give real package name, not `np`
funct: numpy.sum
"""
di = yload(yaml)
pr = di["processes"]
func = load_func(pr["funct"])
array = [pr["args1"], pr["args2"]]
print (f"{func=} {func(array)=}")
输出:
func=<function sum at 0x106645e50> func(array)=15
推荐阅读
- swiftui - 在 SwiftUI 中的 LazyVGrid 中显示提示视图
- sql - SQL - 每个用户的已读/未读通知表结构
- powershell - Powershell - 在目录的长文件路径中查找嵌套文件夹的数量
- excel - Excel 公式未正确引用 - 公式正在修改
- dependencies - Terraform:在其他模块之前调用 null_resource (local-exec)
- python - 如何为 BERT 模型正确添加和返回索引
- java - 休眠:对实体的投影
- java - 如何在 Android Studios 中更新联系人的电话号码
- python - 检查json文件是否有条目
- python - 将新数据附加到 JSON