Simplify `if 'foo' in kwargs and kwargs['foo'] is True:`
是否可以简化
例如,在
1 2 3 4 5 6 | def foo(*args, **kwargs): if 'foo' in kwargs and kwargs['foo'] is True: do_something() if 'bar' in kwargs and kwargs['bar'] is True: do_something_else() ... |
一个可能的解决方法是通过增加复杂性来隐藏一些复杂性…
1 2 3 4 5 | def parse_kwargs(kwords, **kwargs): keywords = {} for kw in kwords: keywords[kw] = True if kw in kwargs and kwargs['kw'] is True else False return keywords |
然后在我的主要功能中:
1 2 3 4 5 6 7 8 | def foo(*args, **kwargs): kw = parse_kwargs(**kwargs) if kw['foo']: do_something() if kw['bar']: do_something_else() ... |
我想知道我是否可以使用一个更简单的方法,更少的样板文件…
当访问不存在的密钥时,
1 | if kwargs.get('foo'): |
或
1 | if kwargs.get('foo', False): |
检查可能未设置的值的方法是使用
如果只检查值本身,布尔测试就变成了真的;因此编写起来更简单(而且是正确的python样式)。
如果Kwargs.get("foo"):…
这个怎么样?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def foo(*args, **kwargs): keywords = {'foo': do_foo_something, 'bar': do_bar_something, 'frug': do_frug_someting, ...} for k in keywords: if kwargs.get(k, False): keywords[k]() def do_foo_something(): do stuff def do_bar_something(): do stuff def do_frug_something(): do stuff |