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