在yaml文件中使用带有stepsize的范围

时间:2018-01-11 03:40:43

标签: python range yaml

在.yaml文件中,我想指定某个字段的范围,例如, list_field: range(10,50,5) 在上文中,我打算list_field为“pythonic”range(10,50,5)。有没有办法实现这个目标?

1 个答案:

答案 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)}

另见How to specify ranges in YAML?