Python if语句:False与0.0

Python if语句:False与0.0,python,if-statement,Python,If Statement,是否可以: for k,v in kwargs.items() if v == None or v == '' or v == 1.0 or v == False: del kwargs[k] 如果v==0.0,是否不删除键?(False似乎等于0.0),并且不删除等于True的键。您应该使用v is False而不是v==False。这同样适用于与None的比较。见: 与None之类的单例进行比较时,应始终使用“is”或“is not”,而不应使用相等运算符 用你的建议

是否可以:

for k,v in kwargs.items()
    if v == None or v == '' or v == 1.0 or v == False:
       del kwargs[k]

如果v==0.0,是否不删除键?(False似乎等于0.0),并且不删除等于True的键。

您应该使用
v is False
而不是
v==False
。这同样适用于与
None
的比较。见:

与None之类的单例进行比较时,应始终使用“is”或“is not”,而不应使用相等运算符


用你的建议让大家慢下来,从政治公众人物8:

不要使用==

   Yes:   if greeting:

   No:    if greeting == True:

   Worse: if greeting is True:
另外,比较浮点值时,不应使用==,而是


abs(x-other)或者您可以这样说:

if v in (None, '', 1.0) or v is False:

谢谢你的回复。利用这些建议,问题得以解决:

kwargs = {'None': None, 'empty': '', 'False': False, 'float': 1.0, 'True': True}       
for k,v in kwargs.items():
    if v in (None, '', 1.0) and v is not True:
        del kwargs[k]
    if v is False:
        del kwargs[k]

kwargs
{'True': True}
-->

你也可以用

if not v:
    # do something
如果v为False,这可能没有
那么精确,因为如果
v
0
空集
等,它也会运行


我遇到了这个问题,上面的解决方案对我很有效。

你绝对应该(适用于所有单身人士,例如
True
None
)。@delnan:是的,你是对的。我改变了措辞,增加了一些细节……如果你这样做,你可以删除
或v=''
部分。但这不适用于真/假。请参阅:Good:
中的最后一点,如果是问候语
;错误:
如果问候语==True
;最糟糕的是:
如果问候语是真的
@James Blackburn:这是关于测试布尔值的,但这在这里不起作用。阅读问题:他不想测试值是否真实,他也特别想测试类型。在样式指南顶部请注意:“但最重要的是:知道什么时候不一致——有时样式指南根本不适用。”当然,你可以说OP不应该一开始就这样做。
if not x
当然比
if x==False
。但在这里,问题是如何检查某个东西是否真的是布尔值
False
,而不是“falsy”。不
0.0 in(None,,,1.0,False)
->True,因为序列的线性搜索
使用
==
(这通常是想要的行为,但不是这里)。@delnan:是的,我只是更改了它,问题在于False,因为0.0==False,所以他应该把v=True的“is False”放进去,因为1.0==True。@Mark Tolonen:是的,你是对的,但我认为Izz已经纠正了:)仅供参考,这在Python 2.x中有效,但在Python 3中,
.items()
返回一个延迟迭代的对象,而不是项元组列表。在迭代字典时删除项目将导致
运行时错误
。您能用更多代码包含更详细的解释吗?
if not v:
    # do something