Python: 条件参数列表


在实际开发中,我们会遇到如下一种需求。

1. 默认条件有 (a, b, c, d ...),总之很多。
2. 调用者可以传递 (b = False, c = False) 来提供 "非" 条件,其他默认为 True。
3. 或者传递 (b = True, c = True),其他默认为 False。
4. 还可以用 (all = True, ...) 来明确指定默认值。

>>> def test(**on):
...     # 全部条件列表
...     accept_args = ("a", "b", "c", "d", "e")
...
...     # 默认条件
...     default = on.pop("all", None)
...
...     # 如果没有显式指明默认条件,则检查参数列:
...     #   1. 如果有任何一个 True 条件则默认值为 False。
...     #   2. 如果全部为 False,则默认值为 True。
...     if default is None: default = not(True in on.values())
...
...     # 使用 setdefault 补全参数字典
...     for k in accept_args: on.setdefault(k, default)
...
...     return on
...

>>> test(b = False, e = False)
{a: True, c: True, b: False, e: False, d: True}

>>> test(c = True)
{a: False, c: True, b: False, e: False, d: False}

>>> test(a = True, e = False)
{a: True, c: False, b: False, e: False, d: False}

>>> test(all = True, c = False, e = True)
{a: True, c: False, b: True, e: True, d: True}

>>> test(all = True, c = False, e = False)
{a: True, c: False, b: True, e: False, d: True}

>>> test(all = False, c = True, e = True)
{a: False, c: True, b: False, e: True, d: False}
附: 参考自 eventlet 源码。

相关内容

    暂无相关文章

评论关闭