我可以使用内置函数bool
来检查这一点。
>>> bool("")
False
>>> bool("dog")
True
我也可以在使用条件时使用这些真实性值。例如:
>>> if "dog":
... print("yes")
...
yes
这不适用于=
运算符,但:
>>> "dog" == True
False
>>> "dog" == False
False
有人能解释为什么==
的行为似乎与条件不同吗?
当您比较"dog"==True
时,您还比较了这些对象的类型,而不仅仅是它们的布尔值。
现在,由于True
具有类型bool
和dog
具有类型str
,根据==
运算符,它们是不等价的,而不管它们的布尔值是否相等。
注意:这里检查了对象的类型和布尔值。
我相信您的困惑可能来自于将Python与JavaScript等语言进行比较,后者有一个=
和一个==
操作符。Python不是这样工作的。
在Python中,比较相等性的唯一方法是使用=
,这将比较值和类型。
因此,如果比较True==“dog”
,则表达式立即为False
,因为类型bool
和str
不是可以比较的类型。
尽管如此,请注意,这并不意味着它们之间没有可比较的类型。例如set
和frozenset
:
frozenset({1,2,3}) == {1,2,3} # True
或者干脆int
和float
1 == 1.0 # True
这是大多数内置类型的行为。
在定义自己的类型的情况下,即定义类时,您可以编写__eq__
,当您将一个类对象与另一个值进行比较时,将调用该代码。
举例来说,您可以这样做(顺便说一句,注释中指出这是一个糟糕的想法,您不应该继承内置类型)。
class WeirdString(str):
def __eq__(self, other):
return str(self) == str(other) or bool(self) == bool(other)
s = WeirdString("dog")
s == True # True
在没有定义__eq__
的情况下,Python会返回到比较对象是否与is
是同一个对象。
请参阅下面摘录的文档的真值测试和比较部分。
简而言之,大多数事情在默认情况下都是真实的,这就是为什么bool(“dog”)
是真实的。=
操作符比较两个对象是否相等,而不是像我假设的那样比较它们的真实性。
4.1. 真值检验
可以对任何对象进行真值测试,以便在if或而条件中使用,或者作为下面布尔运算的操作数。
默认情况下,对象被认为是true,除非它的类定义了返回False的__bool__()
方法或与对象一起调用时返回零的__len__()
方法。
以下是大多数被认为是错误的内置对象:
None
和false
除非另有说明,否则具有布尔结果的操作和内置函数总是返回0或False表示false,返回1或True表示true。重要的例外:布尔运算或
和和
总是返回一个操作数。)
4.3.比较
不同类型的对象(不同的数值类型除外)从不进行相等比较。
问题内容: 有人可以使用以下示例数据解释JavaScript Truthy和Falsy。我读过其他主题,但仍然感到困惑。 根据我的理解,我相信这是唯一的真理,而其余的都是虚假的-这是正确的吗? 问题答案: 据我了解,我相信var a = 1; 是唯一的真理,其余都是虚假的-这是正确的吗? 没有。 var a = 0; 数字零是 虚假的 。但是,请注意,字符串零是真实的。 var a = 10 ==
我目前正在研究字符串concat选项,以及它们对整体性能的影响。我的测试用例产生了让我震惊的结果,我不确定我是否忽略了什么。 这里是交易:在java中执行将(在编译时)创建一个新的。 对于我的测试用例,我正在从我的硬盘加载一个文件,其中包含1661行示例数据(经典的“Lorem Ipsum”)。这个问题不是关于I/O性能,而是关于不同字符串concat方法的性能。 如您所见,两个测试的设置是相同的
本文向大家介绍关于Java Object你真的了解了吗,包括了关于Java Object你真的了解了吗的使用技巧和注意事项,需要的朋友参考一下 导读: 在平时的coding中hashCode()和equals()的使用的场景有哪些?clone深复制怎么实现?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有没有跟我一样,想好好的了
不知道啥时候投的字节国际化产品(java) 7月31 一面凉经 一个小时 自我介绍 两个项目中的问题 项目中有用到bitmap实现签到,开始发散,聊到布隆过滤器(有哪些方法实现),又聊到hash一些问题 八股 1,MVCC和undoLog(这一个点聊了十五分钟了快,我不知道他到底想问啥) 2,undolog细节,里面存的什么,什么时候存,数据格式 3,四种隔离级别 四种隔离级别怎么保证的,以及什么
本文向大家介绍如何真正的了解python装饰器,包括了如何真正的了解python装饰器的使用技巧和注意事项,需要的朋友参考一下 合理使用装饰器可以简化开发,并且使得代码更加清晰。下面我们分别介绍两种装饰器,不带参数的装饰器和带参数的装饰器。 一、不带参数的装饰器 我们用一个实际的例子来引入装饰器的概念,比如我们现在有一个方法A(),然后我们需要在方法A()执行之前在终端打印"function is
本文向大家介绍关于iOS获取属性你真的了解吗?,包括了关于iOS获取属性你真的了解吗?的使用技巧和注意事项,需要的朋友参考一下 前言 属性对各位iOS开发者来说应该都不陌生,如果iOS中谈到取属性,相信大家都会夸夸其谈,不就是get方法吗?或者大谈kvc取属性的机制。不得不说这些也是对的。这时大家可能就疑惑了,那你还要说啥的!!大家不妨想想,这些都是代码层的实现,其实我们的代码最终都会被编译,然后