运算符是现代编程中绝对重要的一部分。它们通常用于数学运算。Python编程语言有一系列不同的操作符,并且不断添加新的操作符。一种具有一些相当有趣的功能和特性的运算符是加法运算符和相等运算符。乍一看,这似乎只是加法运算符和相等运算符的基本组合。虽然情况可能如此,但有一些非常有趣的属性使该运算符与众不同。今天,我想展示这个运算符的一些有趣的特性和属性。概述在深入研究这个奇怪的运算符之前,我们应该熟悉一下这个运算符在语言中的常用方式。从这个意义上说,加号等于可以被认为是加法和断言的快捷方式。我们可以这样代替:x=5xx=x+5print(x)10x=5x+=5print(x)当然,这个运算符的使用取决于个人喜好。有些用户可能更喜欢后一种方法,但在我个人看来,我总是发现加等于运算符可以使此类表达式更加简洁。可变元组您很可能熟悉Python中的元组和列表数据结构。这是Python中两种不同类型的可迭代一维数组,它们仅相差一个键。元组是不可变结构,这意味着一旦定义,元组就不能更改。列表当然是可变的,并且它们包含像append()这样的方法。虽然元组不是可变对象,但许多程序员在查看它们时忽略了一个关键区别。虽然元组本身可能不可变,但其中的类型仍然可变。元组仍然是一种数据结构,该元组中的数据仍然属于其各自的类型。但是,Python仍然会在尝试改变不可变类型时发生抛出。有了这个功能,我们可以预期下面的代码会显示一个错误,说明元组是不可变的。z=(5,10,15)z[4]=15但是,为了证明元组中包含的数据仍然是可变的,如果我们想从元组中取出一些数据,我们可以修改它:newnum=z[3]newnum=z[2]newnum+=5print(newnum)20考虑以下列表元组:letters=(["S","T"],["A","D"])元组本身是一个不可变类型。然而,其中一个字母在字母L之后而另一个字母在字母L之前的列表仍然是可变的。如果我们现在尝试将另一个字母添加到此列表中,您认为会发生什么情况?letters[0]+="Q"正如预期的那样,我们得到另一个类型错误,因为元组一旦创建就不可更改。但是,此类型错误仅在调用数据结构上的运算符后才会抛出。换句话说,我们可能遇到了异常,但如果我们现在从元组中打印出列表,我们将看到元素实际上已经添加到列表中:print(letters[0])['S','T','Q']需要注意的是,它不能直接处理数据类型。Python的有趣之处在于,基类内部的数据类型与我们可能在基类外部使用的数据类型之间基本上没有关键区别。这意味着我们实际上可以用纯Python重写这些类型。这与大多数语言不同,大多数语言通常包括未在语言本身中构建的基本数据类型。信不信由你,这种类型错误和元组可变性是Python的特性,而不是错误。乍一看,这里似乎犯了某种错误,但考虑到Python的方法,这在某种程度上确实是有道理的。这一切都与Python如何处理数据有关,更重要的是,加等于如何处理不同的数据类型。这就是为什么加等号如此棒的部分原因!仔细看看现在我们知道了加等于运算符有多么古怪,为了更好地理解其用法中的古怪之处,让我们来看看该运算符实际上是如何工作的。当然,这将是此运算符上相同功能的Python实现的较粗略版本。代码看起来像我们期望的那样:defplusequals(num1,num2):total=num1.__iadd__(num2)num1=total但是,每当我们使用更大的表达式而不是简单的数据类型时,我们可以认为代码看起来更像如下:defplusequals(x[0],element):total=x[0].__iadd__(element)x[0]=total当然,正如我们前面提到的,从元组中提取的元素是完全可以添加元素的.但是,当我们将x的第一个(第0个)索引分配给新的总数时,我们会得到元组的类型错误。原文链接:https://towardsdatascience.com/pythons-most-confusing-operator-96c67d6e661a
