在 yaml 文件中使用范围和步长

wol*_*stc 6 python yaml range

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

lem*_*ead 5

YAML 没有办法在其规范中指定范围,因此如果您想要一种与语言无关的方式来指定范围,则必须在本机 YAML 之上发明自己的编码。一些例子:

list_field:
  start: 10
  step: 5
  stop: 50
list_field2:
  range:
  - 10
  - 50
  - 5
list_field3: range(10,50,5)
Run Code Online (Sandbox Code Playgroud)

如果使用像pyyaml这样的东西,那么您可以使用自定义解析器和构造函数来教 pyyaml 如何始终将这些东西解码/编码为/来自 python range 对象(python3)或 python xrange 对象(python2)

如果您不关心其他语言,您也可以始终将范围存储为序列化对象,例如使用标签,例如!!python/object/apply:builtins.range [10, 50, 5]。它们看起来不是最漂亮的,但会反序列化为 pythonrange对象,而不需要编写自定义编码器/解码器代码:

>>> 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)}
Run Code Online (Sandbox Code Playgroud)

另请参阅如何在 YAML 中指定范围?