Mat*_*att 2 python dictionary conditional-statements
if 'force' in kwargs and kwargs['force'] is True:
Run Code Online (Sandbox Code Playgroud)
It feels like there should be a better way of writing this condition since I'm repeating both the key and variable.
假设你真的想检查返回的关键字参数is True,这里有另一种稍微不同的方法:
if kwargs.get('force', False) is True:
Run Code Online (Sandbox Code Playgroud)
我认为添加False论点对读者来说更加明确/清晰。
使用上面的get方法,该方法返回的每个值都会导致该子句被跳过,除非它包含一个值True。
然而,在将类型转换为布尔值时,Python 非常好 - 通常根本不需要显式检查is True. 如果是这种情况,您可以简单地执行以下操作:
if kwargs.get('force', False):
Run Code Online (Sandbox Code Playgroud)
这样做,该语句if False仅在少数情况下会减少到。以下是其中一些(可能不是全部 - 尽管文档说这涵盖了所有这些):
FalseNone - Python 的空值[], (), {}, set()- 一个空容器,如list, tuple, dict, 或set''或""- 一个空字符串0, 0.0- 任何等于零的数字__bool__()or__len__()方法,当该方法返回整数零或 bool 值时False。在这种情况下,该get方法返回的每个值都将导致该子句被执行,除非它包含一个评估为 的值False,例如上面的示例之一。任何其他值都将评估为True。(旁注:包含的计算结果为值的容器False仍然评估为True,例如,[None, None]或(0, 0)或{False, False};这可以是意外对于没有经验的Python用户)。
如果您希望在您检查它的时间点添加kwargs值为的键False:
if kwargs.setdefault('force', False):
Run Code Online (Sandbox Code Playgroud)
虽然@EmanuelePaolini提供了一个很好的答案,但我还想挑剔另一件事。您无需检查某事是否属实。例如,您的代码块将变成这样:
if 'force' in kwargs and kwargs['force']:
Run Code Online (Sandbox Code Playgroud)
而@EmanuelePaolini 的解决方案将变成这样:
if kwargs.get('force'):
Run Code Online (Sandbox Code Playgroud)