如果kwargs中的键为true,则为Python

如果kwargs中的键为true,则为Python,python,conditional-statements,dictionary,Python,Conditional Statements,Dictionary,感觉应该有更好的方法来编写这个条件,因为我正在重复键和变量。更好的方法: if 'force' in kwargs and kwargs['force'] is True: 依赖于这样一个事实,即如果kwargs.get('force')不在kwargs中,那么kwargs.get('force')是None。虽然提供了一个很好的答案,但我还想挑剔另一件事。你不需要检查事情是否属实。例如,您的代码块将变成: if kwargs.get('force') is True: if 'force'

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

更好的方法:

if 'force' in kwargs and kwargs['force'] is True:
依赖于这样一个事实,即如果
kwargs.get('force')不在kwargs中,那么
kwargs.get('force')是None

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

if kwargs.get('force') is True:
if 'force' in kwargs and kwargs['force']:
解决办法是:

if kwargs.get('force') is True:
if 'force' in kwargs and kwargs['force']:

假设您确实想检查返回的关键字参数
是否为True
,下面是另一种稍微不同的方法:

if kwargs.get('force'):
我认为添加
False
参数对读者来说更为明确

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

然而,Python在将类型转换为布尔值时非常好——通常不需要显式地检查
是否为True
。如果是这种情况,您可以简单地执行以下操作:

if kwargs.get('force', False) is True:
通过这种方式,只有在少数情况下,如果为False,则语句会减少为
。以下是其中的一些(可能不是全部——尽管这涵盖了全部):

  • False
  • None
    -Python的空值
  • []
    ()
    {}
    set()
    -空容器,如
    列表
    元组
    dict
    集合
  • '
    '
    -空字符串
  • 0
    0.0
    -任何等于零的数字
  • 用户定义类的实例,如果该类定义了
    \uuu bool\uu()
    \uu len\uuu()
    方法,则该方法返回整数零或bool值
    False
在这种情况下,
get
方法返回的每个值都将导致执行子句,除非它包含一个计算结果为
False
的值,例如上面的一个示例。任何其他值都将计算为
True
。(旁注:包含计算结果为
False
但计算结果为
True
的值的容器,例如
[None,None]
(0,0)
{False,False}
;对于没有经验的Python用户来说,这可能是意外的)

如果要在检查时将值为
False
的键添加到
kwargs

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

如果kwargs.get('force',False):
,可能吗?(关于
get
的文档在这里:)@NightShadeQueen否,因为
kwargs.get('force',False)
将返回
False
如果
kwargs
中找到了
'force'
。不,如果kwargs中没有'force',它只返回
False
<例如,代码>{'a':'b'}.get('a',False)
返回
'b'
。您如何知道OP不需要检查某些内容是否为真?您建议的代码与OP提供的代码不同。@EmanuelePaolini OP明确检查
kwargs[“force”]
是否为
True
,因此可以缩短代码。如果kwargs['force']==1,则kwargs['force']条件满足,而(kwargs['force']为True)不满足。这与OP给出的条件不同。请参见@Ethan Bierlein答案中的注释。@EmanuelePaolini从技术上讲,你是对的。然而,由于OP的代表性很高,这是OP向tagged Python提出的第一个问题,所以我猜测OP可能是一个没有经验的Python用户。因为在Python中检查
是否为True
有点不寻常,所以我推断OP真正想要做的是以通常的方式进行检查。不过,我应该更明确地说明这一点。@EmanuelePaolini我编辑了这篇文章,使我的假设更加明确。