当前位置: 首页 > 面试题库 >

将“ ==”替换为“ is”以比较布尔值是否安全?

上官扬
2023-03-14
问题内容

我做了几个布尔比较:

>>> (True or False) is True
True
>>> (True or False) == True
True

听起来像布尔值,==并且is可以互换。

有时候使用起来更清晰 is

我想知道:

TrueFalsepython中预分配?

bool(var)始终返回相同的True(或者False与预先分配)True(或False)?

它是安全的替代==is比较布尔值?

这与最佳实践无关。

我只想知道真相。


问题答案:

您可能永远不需要比较布尔值。如果您正在执行以下操作:

if some_bool == True:
  ...

…只需将其更改为:

if some_bool:
  ...

没有is==需要。

正如评论者所指出的,有比较布尔值的正当理由。如果两个布尔值都未知,并且您想知道一个布尔值是否等于另一个布尔值,则应使用==!=而不是isis not(原因说明如下)。请注意,这在逻辑上分别与xnor和等效,xor在Python中它们不作为逻辑运算符存在。

在内部,应该永远只能是两个布尔字面对象(另见C
API
),并且bool(x) is True应该是True,如果bool(x) == True任何Python程序。两个警告:

  • 并不意味着x is True,如果x == True,但是(例如x = 1)。
  • 这对于Python(CPython)的常规实现是正确的,但在其他实现中可能并非如此。因此==是比较可靠的比较。


 类似资料:
  • 因此,我想知道是否有一个利索的方法来做这件事,除了

  • 问题内容: 以这个为例(摘自Java regexchecker不起作用): 是否用于检查的值是否重要? 我知道有这是颇为相似。但是,很明显,这个问题只针对原始对象,而不是对象包装器;因此,将不适用。 另外,应该以不同于其他的方式对待? 问题答案: 从您的评论看来,您正在寻找使用包装器类的“最佳实践” 。但是实际上 并没有 最佳实践,因为使用此类开始是一个坏主意。使用对象包装的唯一原因是在您绝对 必

  • 检查给定的参数是否是一个原生的布尔值。 使用 typeof 来检查一个值是否为一个布尔值。 const isBoolean = val => typeof val === 'boolean'; isBoolean(null); // false isBoolean(false); // true

  • 问题内容: 我将有一个像 该字符串将能够具有所需的任意多个“ AND”组。AND组内将没有任何嵌套组。所有组将始终由OR分隔。 我可以只切换AND 和AND 。 我想要将此字符串传递到某种类型的eval方法中,并输出TRUE或FALSE。 有什么可以做到的吗? 问题答案: 您可以使用JDK1.6随附的内置Javascript引擎来评估包含数学表达式的字符串。 您可以在这里查找:ScriptEngi

  • 为什么与有不同的 ? 我正在使用Drools DSL,我必须实现一个规则: 我有这些DSL定义: 要求是以肯定的方式编写可重用的DSL语句,并具有否定它们的能力。

  • 问题内容: 我总是成功地对数组进行如下排序(当我不希望使用标准字典顺序时): 现在,有人告诉我这是错误的,我需要代替。是真的,如果是,为什么呢?我已经测试了比较功能,并且可以正常工作!此外,为什么我的解决方案错了会如此普遍? 问题答案: 我总是这样成功地排序我的数组 不,你没有。并没有注意到它。一个简单的反例: 为什么? 因为即使大于,比较函数也确实会返回(或等效地)。但是暗示着这两个元素被认为是