【发布时间】:2019-03-23 21:40:45
【问题描述】:
我正在 Python 3 中实现进化策略算法。我创建了一个名为 Individual 的类,它从如下所示的文件(YAML 格式)中读取配置:
num_of_genes: 3
pre_init_gene:
gene1: 1.0
gene2: 1.0
gene3: 1.0
metrics:
- metric1
- metric2
obj_funcs:
obj_fun1: 'lambda x,y: x+y'
obj_fun2: 'lambda x: (x**3)/2'
这个想法是个人将读取此文件以获取其配置。 我知道我可以将我的 lambda 表达式保存为字符串,然后对其调用 eval。
但是,对于这个问题是否有更 Pythonic 的解决方案?我对 Python 中的 OO 感觉不太舒服,但我愿意接受建议。
【问题讨论】:
-
这些函数必须是 lambda 表达式吗?我做了一个类似的技巧(在配置文件中定义函数),我做了一个
functions包并在它下面定义每个函数,然后obj_funcs: {obj_fun1: "functions.function_one", ...} -
在 YAML 文档中可以更改实际的 Lamba 表达式是否重要,还是更多/专门用于文档目的?
-
“我可以将我的 lambda 表达式保存为字符串”是什么意思?您将从该 YAML 文档中加载它们,从而生成一个 Python 字符串。在调用 eval 之前,你会将它们保存到哪里? (将数据结构保存到 YAML 文档的等价物称为 dumping)。
-
@AdamSmith:我喜欢你的建议。我相信只要人们有一些 Python 知识,它就会更好地工作。但是,就我而言,使用我的程序的人不知道如何用 Python 编程。不管怎样,谢谢你的建议!
-
@alexandredias3d 你的用户不会知道 Python,但会知道 lambda 演算?多么奇怪的特定用例!
标签: python python-3.x lambda