>>0==FalseTrue>>>0.0==FalseTrue谢谢相关讨论空" />

python:将空字符串与false进行比较是错误的,为什么?

您所在的位置:网站首页 python中空字符串的布尔值 python:将空字符串与false进行比较是错误的,为什么?

python:将空字符串与false进行比较是错误的,为什么?

2024-07-13 17:00:30| 来源: 网络整理| 查看: 265

如果not ''对True进行评价,为什么'' == False对False进行评价?

例如,与False相比,其他类型(如0、0.0)的"空隙"将返回True:

1234>>> 0 == False True >>> 0.0 == False True

谢谢

相关讨论 空序列的计算结果为False,但不等于False。请阅读:stackoverflow.com/a/9573259/6313992(前2个答案包含此内容) 谢谢。然而,我的问题仍然存在:为什么? @TonyPower是因为这是选择如何实现Python的。"为什么"这个问题没有真正的答案。另外,为什么空列表等于假?它仍然是一个列表,只是一个空列表。

In the context of Boolean operations, and also when expressions are used by control flow statements, the following values are interpreted as false: False, None, numeric zero of all types, and empty strings and containers (including strings, tuples, lists, dictionaries, sets and frozensets). All other values are interpreted as true. User-defined objects can customize their truth value by providing a __bool__() method.

The operator not yields True if its argument is false, False otherwise.

https://docs.python.org/3/reference/expressions.html#comparisons

但是:

The operators , >, ==, >=, , and != compare the values of two objects. The objects do not need to have the same type.

...

Because all types are (direct or indirect) subtypes of object, they inherit the default comparison behavior from object. Types can customize their comparison behavior by implementing rich comparison methods like __lt__() ...

https://docs.python.org/3/reference/expressions.html#boolean-operations

因此,技术实现的答案是,它的行为方式是这样的,因为not和==使用不同的比较。not使用一个对象的"真值"__bool__,而==使用__eq__,这是一个对象与另一个对象的直接比较。因此,有可能问一个物体,它是否认为自己是真实的或虚假的,而不是问它,它是否认为自己等于另一个物体。其默认实现的排列方式是,两个对象都可以认为自己是错误的,但不能认为自己彼此相等。

相关讨论 好极了!!!!这就是我想听到的;)

对于''和[]来说,实际上等于False是没有意义的,因为它们是明显不同的值:字符串和列表。如果他们两个都相等,那么他们就必须相等。它们只是"虚假的",这意味着当它们被转换为布尔值时,它们会变成虚假的。

(*在任何合理构建的语言中)

not是一个返回布尔值的操作。它返回的布尔值取决于操作数是否为假。因此,not x不等于x==False,相当于bool(x)==False。

相关讨论 咳看PHP的逻辑:[] == false; '' == false; [] != '';是的…… 因此我在* 是的,我知道…:o) 所以,你的意思是说''是False是不明智的,但是说0是有道理的?我知道布尔逻辑都是关于零和一的,但是,我觉得说''是False,就像说not ''是真的一样有意义。 python表达式'' is False的计算结果为false,因为is只在操作数引用同一对象时返回true。'' is True的评估结果也是错误的,原因完全相同。 @python中的tonypower是int的一个子类。这在list或str中是不正确的。基本上,False和True只是0和1的特殊情况。例如,True + 2 == 3,而[] + 2给出了一个错误。如果它们相等,则需要能够使用字符串、列表和整数执行其他类型的操作。

这样的比较不是"Python式的"(也就是说,经验丰富的Python程序员自然不会这么做)。Pythonic方法是在一个布尔上下文中使用一个值,如if语句,并让解释器以无形的方式应用bool内置的值来确定True或False值。这就是为什么人们通常编写代码,比如

123456if lst:     print(headers)     for item in lst:         print(item.format()) else:     print(no_data_message)

而不是使用常见的、但不太像Python的if len(lst):或更笨拙但功能仍然正确的if len(lst) > 0:。

不幸的是,在某些方面,python的设计者认为True和False是bool类型的实例,bool是int的子类。因此,True与1比较,False与0比较。数值转换解释了浮点(并且,就这一点而言,是复杂的)结果。

但仅仅因为一个bool(x) == True并不意味着x == True,任何超过bool(x) == False意味着x == False。还有许多其他的价值观认为是错误的,最著名的是

数值零点 None 空字符串 空容器(列表、元组、dict)

他们不可能都平等!

相关讨论 这是有道理的。谢谢。

如果您想查看官方解释,只需按如下方式进行赋值:

123456789print(bool(None) == False) print(False == False) print(bool(0) == False) print(bool(0.0) == False) print(bool(0j) == False) print(bool('') == False) print(bool(()) == False) print(bool([]) == False) print(bool({}) == False)

因为int(False) == 0和int(True) == 1。这就是python在尝试评估0 == False时所做的。

另一方面,bool('') == False。同样适用于bool([])和bool({})。

x对True的评价并不一定意味着x == True。

相关讨论 如果你改变主意?例如:False == 0是做False == bool(0)吗?如果是这样,它应该对空字符串执行相同的操作,而不是这样做。 "这就是为什么在检查布尔值时应该使用is,而不是使用=="——我不明白这是怎么回事。 x is True和x is False的测试对于x的大多数值来说都是错误的,因此您关于使用is的建议是危险的错误。 另外,了解所使用的机制。解释器将bool函数应用于值。bool返回True或False。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭