当前位置: 首页 > 知识库问答 >
问题:

了解弦的真实性

殳越
2023-03-14

我可以使用内置函数bool来检查这一点。

>>> bool("")
False

>>> bool("dog")
True

我也可以在使用条件时使用这些真实性值。例如:

>>> if "dog":
...     print("yes")
...
yes

这不适用于=运算符,但:

>>> "dog" == True
False

>>> "dog" == False
False

有人能解释为什么==的行为似乎与条件不同吗?

共有3个答案

范高刚
2023-03-14

当您比较"dog"==True时,您还比较了这些对象的类型,而不仅仅是它们的布尔值。

现在,由于True具有类型booldog具有类型str,根据==运算符,它们是不等价的,而不管它们的布尔值是否相等。

注意:这里检查了对象的类型和布尔值。

姚海
2023-03-14

我相信您的困惑可能来自于将Python与JavaScript等语言进行比较,后者有一个=和一个==操作符。Python不是这样工作的。

在Python中,比较相等性的唯一方法是使用=,这将比较值和类型。

因此,如果比较True==“dog”,则表达式立即为False,因为类型boolstr不是可以比较的类型。

尽管如此,请注意,这并不意味着它们之间没有可比较的类型。例如setfrozenset

frozenset({1,2,3}) == {1,2,3} # True

或者干脆intfloat

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是同一个对象。

漆雕修德
2023-03-14

请参阅下面摘录的文档的真值测试和比较部分。

简而言之,大多数事情在默认情况下都是真实的,这就是为什么bool(“dog”)是真实的。=操作符比较两个对象是否相等,而不是像我假设的那样比较它们的真实性。

4.1. 真值检验

可以对任何对象进行真值测试,以便在if或而条件中使用,或者作为下面布尔运算的操作数。

默认情况下,对象被认为是true,除非它的类定义了返回False的__bool__()方法或与对象一起调用时返回零的__len__()方法。

以下是大多数被认为是错误的内置对象:

  • 定义为false的常量:Nonefalse

除非另有说明,否则具有布尔结果的操作和内置函数总是返回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取属性的机制。不得不说这些也是对的。这时大家可能就疑惑了,那你还要说啥的!!大家不妨想想,这些都是代码层的实现,其实我们的代码最终都会被编译,然后