Luc*_*cas 15 python math yaml pyyaml
有时候我必须在配置文件中指定时间(以秒为单位),并且编写精确的秒数非常烦人 - 相反,我想执行算术,所以我可以使用:
some_time: 1 * 24 * 60 * 60
Run Code Online (Sandbox Code Playgroud)
而不是确切的:
some_time: 86400
Run Code Online (Sandbox Code Playgroud)
不幸的是,在使用这一行时:some_time: 1 * 24 * 60 * 60它会将该配置行视为字符串.当然,我可以使用 - eval(config['some_time'])但我很想知道是否可以在YAML中执行算术运算?
Raf*_*ida 11
我不认为有.至少不符合规范(http://yaml.org/spec/1.2/spec.html).人们向yaml添加非官方标签(维基百科似乎说有关于yield标签的提议,尽管他们没有说谁建议或在哪里:http://en.wikipedia.org/wiki/YAML#cite_note-16) ,但在pyyaml中似乎没有你需要的东西.
查看pyyaml特定标签似乎没有任何感兴趣的东西.虽然!!timestamp '2014-08-26'在某些场景中可能很方便(http://pyyaml.org/wiki/PythonTagScheme).
小智 6
这可以通过使用 PyYAML 提供的 Python 特定标签来完成,即:
!!python/object/apply:eval [ 1 * 24 * 60 * 60 ]
Run Code Online (Sandbox Code Playgroud)
如下所示:
In [1]: import yaml
In [2]: yaml.load("!!python/object/apply:eval [ 1 * 24 * 60 * 60 ]")
Out[2]: 86400
Run Code Online (Sandbox Code Playgroud)
这自然与 perform 相同eval(config['some_time']),但使您不必在程序中显式处理它。