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 源码。
补充:Web开发 , Python ,