在.yaml文件中,我想指定某个字段的范围,例如,
list_field: range(10,50,5)
在上文中,我打算list_field
为“pythonic”range(10,50,5)
。有没有办法实现这个目标?
答案 0 :(得分:1)
YAML无法在its specification中指定范围,因此如果您想要一种与语言无关的方式来指定范围,则必须在本机YAML之上创建自己的编码。一些例子:
list_field:
start: 10
step: 5
stop: 50
list_field2:
range:
- 10
- 50
- 5
list_field3: range(10,50,5)
如果使用pyyaml之类的东西,你可以使用custom resolver and constructor教pyyaml如何总是将这些东西解码/编码为python范围对象(python3)或python xrange对象(python2)
如果您不关心其他语言,您也可以随时将范围存储为序列化对象,例如:使用标签,例如!!python/object/apply:builtins.range [10, 50, 5]
。他们不会看起来最漂亮,但会反序列化为python range
对象而无需编写自定义编码器/解码器代码:
>>> import yaml
>>> print(yaml.dump({'list_field': range(10, 50, 5)}))
list_field: !!python/object/apply:builtins.range [10, 50, 5]
>>> print(yaml.load(yaml.dump({'list_field': range(10, 50, 5)})))
{'list_field': range(10, 50, 5)}