Python中 "是 "和"=="的区别

210 阅读4分钟

嘿,伙计们!,我们都知道,Python有一些大多数解释型语言所不具备的优点。其中一些是我们在做数学计算时用来执行的灵活概念。在这样做的时候,我们会对运算符和关键字产生一些困惑。现在,在这篇文章中,我们的目的是要弄清它们之间的区别。的双倍等于的运算符。所以,让我们进入正题。

什么是Python中的运算符?

任何编程语言中的运算符都是基础知识背后的主要基本概念。 在Python中,有以下几种运算符

  1. 逻辑运算:执行逻辑计算
    1. &: 和
    2. |: 或
    3. !: 不是
  2. 算术:执行基本的算术计算
    1. +: 加法
    2. -**:**乘法
    3. / : 除法
    4. %: modulo (返回余数)
    5. //: 地面除法运算(浮动除法返回整数值)
  3. 指数:计算数字的幂和XOR值
    1. **: 功率
    2. ^: XOR

让我们对这些概念进行编码并追踪其差异

现在,在这里我们将对这些关键字进行比较,并尝试追踪它们操作的差异。

==" 运算符

让我们以两个变量为例。这两个变量各自有不同的值。比如说a有20,b有30。现在,我们都知道,它们是不相等的。但是,计算机将如何识别这一点呢?为此,我们有一个双等号运算符。让我们举一个代码的例子。

代码

a = 30
b = 30
if a == b:
    print(True) 
else:
    print(False)

输出

这里我们可以说明,等价的主要功能是检查数值是否相同。对于一个复杂的例子,我们也可以用函数来检查。

检查一个数字的平方根的代码

from math import sqrt
def square_root(val):
    return (val**(1/2))
    
a = sqrt(9)
b = square_root(9)
print(a == b)

输出

这里我们比较两个函数返回的值。它们返回的值是一样的,但是,在解释器中对两者的识别是不同的。

print(id(a))
print(id(b))

输出

2178644181968
2178644086384

这里的双倍等于运算符显示了不同的性质。当我们比较它们的身份时,它将返回错误。它返回错误,所以为了解决这个问题,我们使用 "是 "运算符。

关键字 is

这个关键字用于数值的比较,也用于对象的引用。当我们创建任何类的对象时,它是持有每个类的属性的实例。对于每一个新创建的对象,解释器都会为其分配新的身份。

以数字为例

a = 10
b = 10.0
print(a is b)

输出

我们可以看到,两个数字都是10,但一个是浮点数,另一个是整数。所以,让数值看起来相似,对象类型可以不同。

数据结构的例子

在这个例子中,我们有两个列表a和b,它们都包含相同的元素值。但是,当我们试图用 **"是 "**关键字来比较它们时,输出结果是令人惊讶的。

a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]


print(type(a))
print(type(b))

if (a is b):
    print("Successful")
    
else:
    print("Unsuccessful")

输出

<class 'list'>
<class 'list'>
False

解释

  1. 两个列表都有相同的类,即<class "list">。
  2. 但是,主要问题是分配给l1的内存块与l1的内存块不同。
  3. is操作符检查我们创建的对象的内存位置。
  4. 每个对象的内存块的分配是不同的。这使得is返回False值。

例如,用一个NumPy数组

代码

import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[1, 2], [3, 4]])
print(a is b)

输出

同样,NumPy数组也是如此。两个数组都是一样的,但是,分配给它们的内存是不同的。它们的ID是不同的。所以,我们得到的是False

例如,对于一个类

class temp_1():
    def __init__(self, a, b):
        self.a = a
        self.b = b
        
    def print_val(self):
        print(self.a, self.b)
        
        
class temp_2():
    def __init__(self, a, b):
        self.a = a
        self.b = b
        
    def print_val(self):
        print(self.a, self.b)
        
obj1 = temp_1(30, 40)
obj2 = temp_2(30, 40)
obj1.print_val()
obj2.print_val()

print((obj1 is obj2))

解释。

这两个类都有相同的属性,相同的功能以及相同的参数。值得注意的是,通过内存引用,它们是不一样的。所以,通过这个代码实验的结论是。为了使代码的可测试性更有效,关键字比**==**运算符更有用。

总结

双重等于只检查值,但对值和引用都进行检查。所以,这篇文章向我们讲述了Python中 "is "和"=="的区别,以及我们如何在Python编程中有效地使用这两个概念,使我们的代码更加健壮。