检查 False 的正确方法是啥? [复制]
Posted
技术标签:
【中文标题】检查 False 的正确方法是啥? [复制]【英文标题】:what is the correct way to check for False? [duplicate]检查 False 的正确方法是什么? [复制] 【发布时间】:2016-09-03 09:01:43 【问题描述】:哪个更好? (为什么?)
if somevalue == False:
或
if somevalue is False:
如果somevalue
是字符串,你的答案会改变吗?
【问题讨论】:
听起来太累了。 我会写if not somevalue:
尽管对于非布尔类型它的行为会有所不同:if not "":
将运行代码,但 if "" == False:
不会。
您通常不会在 Python 中明确地将对象与 False
/True
进行比较。只需 if somevalue:
或 if not somevalue:
@firegurafiku - 好的,谢谢。但这不是家庭作业。
这个太笼统了,你需要举个实际的例子,你要检查一个布尔值吗?想查看a 字符串是否为空?想查看是否已将值分配给变量?问这个问题表明你缺乏核心的 Python 知识,而对你的个人资料进行快速分析表明通过提出很多毫无意义的问题来获得一些声誉,relevant link
【参考方案1】:
这取决于somevalue
可以是什么:如果somevalue
可以是任何你可以检查它是布尔值和not
:
if isinstance(somevalue, bool) and not somevalue
这不依赖于False
是一个单身人士。如果它总是一个单例,你也可以这样做:
if somevalue is False
但是 Python 的 PEP8 声明你不应该关心它是否与类有关,只需使用:
if not somevalue
这将评估somevalue
是否为“假”。见Python documentation on Truth value testing。
PEP8 状态:
不要使用 == 将布尔值与 True 或 False 进行比较。
并给出这些例子:
Yes: if greeting:
No: if greeting == True:
Worse: if greeting is True:
在您的情况下翻译为:
Yes: if not greeting:
No: if greeting == False:
Worse: if greeting is False:
请记住,除了空字符串''
,每个字符串都被认为是“真实的”。
【讨论】:
【参考方案2】:is
正在检查两个对象是否真的是同一个对象。 ==
正在检查是否相等。
如果您想检查某事是否为假,例如零,与True
相反,做if something == False
。
正如cmets中提到的,你当然可以做if not something
,它可能会提高可读性,但它和if bool(something) == False
一样。
我更喜欢平等,因为在我看来,True
和 False
在 true 或 false 方面应该表现得像 1
和 0
时间>。例如,("a" == "a") == False
的计算结果为 False
,就像 ("a" == "a") == 0
一样。
【讨论】:
mm,if not something
?
@vaultah,是的,但如果问题的表述如下:选择==
或is
,最好使用==
不过和if something == False
是一样的,不是。和if bool(something) == False
一样。
@vaultah,和if bool(something) == False
一样,没错,但只是冗长的说法if something == False
@deets:你确定吗? PEP 285 说:“值 False 和 True 将是单例,例如 None。”以上是关于检查 False 的正确方法是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章