我有一个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文件中的数据解析为可调用的eval()
可能会执行此操作,但可能存在安全问题。有什么合适的方法吗?谢谢
是的,
eval
和exec
都是坏习惯。很高兴你知道:D你可以用字典来做这件事。 您可以做的是定义一个字典,并使键成为YAML中的
funct
值。该值将是一个未调用的函数。这类似于一个变量然后可以对字典使用
funct
来调用适当的方法。如下所示:顺便说一句,你真的不必在多行上做
custom_func
,我这样做只是为了更好地解释它备选方案:}
如果您不想硬编码字典中的每个部分,可以使用^{
您还可以根据函数的Python点路径加载该函数
但是,这只获取函数并调用它,它不会试图找出调用签名,即
np.sum([5,10])
,而不是np.sum(10,5)
输出:
相关问题 更多 >
编程相关推荐