Python,如果kwargs和key中的键是真的

时间:2015-07-28 15:24:48

标签: python conditional-statements dictionary

if 'force' in kwargs and kwargs['force'] is True:

感觉应该有更好的方法来写这个条件,因为我重复了键和变量。

3 个答案:

答案 0 :(得分:4)

虽然@EmanuelePaolini提供了一个很好的答案,但还有另外一件事我想挑剔。你不需要检查某些事情是否属实。例如,您的代码块将变为:

if 'force' in kwargs and kwargs['force']:

@EmanuelePaolini's解决方案将成为现实:

if kwargs.get('force'):

答案 1 :(得分:4)

假设你真的想检查返回的关键字参数is True,这里的另一种方式略有不同:

if kwargs.get('force', False) is True:

我认为添加False参数对读者来说更明确一点。

使用上面的内容,get方法返回的每个值都会导致跳过子句,除非它包含值True

但是,在将类型转换为布尔值时,Python非常好用 - 通常,显式检查is True并不是必需的。如果是这种情况,您可以这样做:

if kwargs.get('force', False):

这样做,语句在少数情况下简化为if False。以下是其中一些(可能不是全部 - 尽管the docs says这涵盖了所有这些):

  • False
  • None - Python的空值
  • [](){}set() - 一个空容器,如listtupledict,或set
  • ''"" - 空字符串
  • 00.0 - 任何等于零的数字
  • 用户定义类的实例,如果该类定义__bool__()__len__()方法,则该方法返回整数零或bool值False

在这种情况下,get方法返回的每个值都将导致执行该子句,除非它包含一个计算结果为False的值,例如上面的一个示例。任何其他值将评估为True。 (旁注:包含评估为False的值的容器仍会评估为True,例如[None, None](0, 0){False, False};这可能是意料之外的没有经验的Python用户)。

如果您希望在检查时将密钥添加到kwargs,其值为False

if kwargs.setdefault('force', False):

答案 2 :(得分:2)

更好的方法:

if kwargs.get('force') is True:

依赖于kwargs.get('force') is None if 'force' not in kwargs'.

这一事实