自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python中令人困惑的操作符

開發(fā) 后端
操作符對于現(xiàn)代編程來說絕對是一個至關(guān)重要的組成部分。它們通常用于數(shù)學(xué)運算。Python編程語言有一系列不同的操作符,并且不斷添加新的操作符。

操作符對于現(xiàn)代編程來說絕對是一個至關(guān)重要的組成部分。它們通常用于數(shù)學(xué)運算。Python編程語言有一系列不同的操作符,并且不斷添加新的操作符。

有一個運算符具有一些相當(dāng)有趣的功能和特點,那就是加等運算符。乍一看,這似乎只是加法和等于操作符的基本組合。雖然可能是這樣,但有一些非常有趣的特性使該操作符與眾不同。今天,我想展示這個操作符的一些有趣的特點和特性。

概述

在深入研究這個奇怪的操作符之前,我們可能應(yīng)該熟悉一下該語言中通常如何使用這個操作符。在這個意義上,加號等于可以被認(rèn)為是加法和斷言的捷徑。而不是像:

  1. x = 5 
  2. xx = x + 5 
  3. print(x) 
  4. 10 

我們可以這樣做:

  1. x = 5 
  2. x += 5 
  3. print(x) 

當(dāng)然,這種操作符的使用取決于個人偏好。有些用戶可能更喜歡后一種方法,但在我個人看來,我總是發(fā)現(xiàn)加號等于運算符可以使這樣的表達(dá)式更加簡潔。

可變元組

您很可能熟悉Python中的元組和列表數(shù)據(jù)結(jié)構(gòu)。這是Python中兩種不同類型的可迭代一維數(shù)組,它們之間只有一個鍵差。元組是不可變的結(jié)構(gòu),這意味著一旦定義,元組就不能被更改。列表當(dāng)然是可變的,它包含了像append()這樣的方法。

雖然元組不是可變對象,但有一個關(guān)鍵的區(qū)別是許多程序員在觀察時忽略的。雖然元組本身可能不是可變的,但其中的類型仍然是可變的。元組仍然是一個數(shù)據(jù)結(jié)構(gòu),該元組中的數(shù)據(jù)仍然屬于其各自的類型。然而,Python仍然具有試圖改變不可變類型時可能會出現(xiàn)的拋出??紤]到這個功能,我們可以預(yù)期下面的代碼會顯示一個錯誤,說明元組是不可變的。

  1. z = (5, 10, 15) 
  2. z[4] = 15 

然而,為了證明元組中包含的數(shù)據(jù)仍然是可變的,如果我們要從元組中取出一些數(shù)據(jù),我們可以對它進(jìn)行修改:

  1. newnum = z[3] 

  1. newnum = z[2] 
  2. newnum += 5 
  3. print(newnum) 
  4. 20 

考慮下面的列表元組:

  1. letters = (["S", "T"], 
  2.                  ["A", "D"]) 

元組本身是一個不可變類型。但是,其中的列表,一個字母在字母L后面,另一個字母在字母L前面,仍然是可變的。如果我們現(xiàn)在試著在這張單子上再加一封信,你覺得會發(fā)生什么?

  1. letters[0] += "Q" 

正如預(yù)期的那樣,我們得到了另一個類型錯誤,因為元組一旦創(chuàng)建就不能更改。但是,只有在對數(shù)據(jù)結(jié)構(gòu)調(diào)用操作符后才會拋出此類型錯誤。換句話說,我們可能遇到了異常,但如果我們現(xiàn)在從元組中打印出列表,我們將看到元素實際上已經(jīng)被添加到列表中:

  1. print(letters[0]) 
  2. ['S', 'T', 'Q'] 

需要注意的是,它不能直接處理數(shù)據(jù)類型。Python的有趣之處在于,在基類內(nèi)部的數(shù)據(jù)類型和我們可能在基類外部使用的數(shù)據(jù)類型之間基本上沒有關(guān)鍵區(qū)別。這意味著我們實際上可以用純Python重寫這些類型。這與大多數(shù)語言不同,后者通常包括在語言本身中沒有結(jié)構(gòu)化的基礎(chǔ)數(shù)據(jù)類型。

信不信由你,這種類型錯誤和元組可變性是Python的特性,而不是bug。乍一看,這里似乎犯了某種錯誤,但考慮到Python的方法學(xué),這一切在某種程度上確實是有意義的。這一切都與Python如何處理數(shù)據(jù)有關(guān),更重要的是,plus-equals如何處理不同的數(shù)據(jù)類型。這就是為什么正等號這么棒的部分原因!

仔細(xì)看看

現(xiàn)在我們已經(jīng)知道了加號等于運算符有多奇怪,為了更好地理解其用法中的怪異之處,讓我們來看看該運算符實際上是如何工作的。當(dāng)然,這將是這個操作符上相同函數(shù)的Python實現(xiàn)的一個更粗略的版本。代碼看起來就像我們期望的那樣:

  1. def plusequals(num1, num2): 
  2.     total = num1.__iadd__(num2) 
  3.     num1 = total 

然而,每當(dāng)我們使用更大的表達(dá)式,而不是簡單的數(shù)據(jù)類型時,我們可以考慮代碼看起來更類似于以下內(nèi)容:

  1. def plusequals(x[0], element): 
  2.     total = x[0].__iadd__(element) 
  3.    x[0] = total 

當(dāng)然,正如我們前面提到的,從元組中提取的元素完全可以添加元素。然而,當(dāng)我們將x的第一個(第0個)索引賦值給新的總數(shù)時,就會遇到元組的類型錯誤。

原文鏈接:

https://towardsdatascience.com/pythons-most-confusing-operator-96c67d6e661a

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2023-12-08 11:05:00

GitLinux

2019-04-25 06:07:17

物聯(lián)網(wǎng)平臺物聯(lián)網(wǎng)IOT

2009-12-16 09:20:25

ScalaErlangRuby

2021-10-31 18:59:55

Python操作符用法

2010-07-14 14:55:07

Perl操作符

2020-12-26 16:51:12

Python操作符開發(fā)

2024-01-07 20:15:49

Python編程語言

2020-12-07 16:56:35

Rails

2020-03-03 15:42:33

Python字典合并代碼

2016-11-17 15:35:51

RxJava操作Subscriber

2009-08-19 17:26:28

C# 操作符

2009-07-21 09:31:00

Scala操作符

2010-02-23 11:18:25

Python 操作符

2010-07-13 11:11:39

Perl標(biāo)量

2009-11-30 16:48:08

PHP操作符

2009-07-14 18:34:22

Jython操作符重載

2009-08-21 09:30:05

is和as操作符

2011-04-08 16:26:14

JavaScript

2010-07-19 11:00:24

Perl操作符

2010-07-14 14:30:31

Perl操作符
點贊
收藏

51CTO技術(shù)棧公眾號