如果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我编辑了这篇文章,使我的假设更加明确。