if 'force' in kwargs and kwargs['force'] is True:
感觉应该有更好的方法来写这个条件,因为我重复了键和变量。
答案 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()
- 一个空容器,如list
,tuple
,dict
,或set
''
或""
- 空字符串0
,0.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'.