Python基礎(chǔ)之運(yùn)算符

文章目錄

1 算術(shù)運(yùn)算符
2 位運(yùn)算符
3 比較運(yùn)算符
4 賦值運(yùn)算符
5 身份運(yùn)算符
6 成員運(yùn)算符
7 邏輯運(yùn)算符


今天總結(jié)一下Python中七大運(yùn)算符的意義,本文大體是按照運(yùn)算符的優(yōu)先級(jí)排序的,看目錄就知道各個(gè)運(yùn)算符的優(yōu)先級(jí)高低啦~~


1 算術(shù)運(yùn)算符

指數(shù)** 優(yōu)先級(jí)最高,其次是 乘*,除/,取整//,取余%,最后是 加+,減-。

這里重點(diǎn)說下/,//,%,其他運(yùn)算符很簡(jiǎn)單,不用多解釋了吧。

1)一個(gè)斜杠/,除法,兩個(gè)int相除也保留小數(shù)。

3/2 = 1.5
10/3 = 3.3333333333333335
4/2 = 2.0

2)兩個(gè)斜杠//,對(duì)除法結(jié)果向下取整。當(dāng)//兩側(cè)存在浮點(diǎn)型時(shí),結(jié)果取整的基礎(chǔ)上會(huì)保留.0。

3//2 = 1
-3//2 = -2 # 向下取整就是向數(shù)值小的那一方向取整,所以是-2
4//2 = 2
4//2.0 = 2.0

3)百分號(hào)%,取模,返回除法的余數(shù)。%兩側(cè)必須是整數(shù),當(dāng)存在存在負(fù)整數(shù)時(shí),余數(shù)符號(hào)與%右邊的一致。

5%3 = 2
-3%2 = 1
3%(-2) = -1 # 符號(hào)與-2一致,所以是-1
4%2 = 0
4%2.0 = 0.0


2 位運(yùn)算符

按位運(yùn)算符是基于二進(jìn)制來(lái)進(jìn)行計(jì)算的,在二進(jìn)制中 1 為 True,0 為 False:

1)位邏輯運(yùn)算符: 與&,或|,異或^,取反~。

  • & :按位與運(yùn)算符,兩個(gè)二進(jìn)制數(shù)相應(yīng)位都為1,則該位的結(jié)果為1,否則為0;
  • | :按位或運(yùn)算符,兩個(gè)二進(jìn)制數(shù)相應(yīng)位有一個(gè)為1時(shí),結(jié)果位就為1;
  • ^ :異或運(yùn)算符,兩個(gè)二進(jìn)制數(shù)相應(yīng)位相異時(shí),結(jié)果為1;
  • ~ :取反運(yùn)算符,對(duì)二進(jìn)制進(jìn)行取反,即 1 取反為 0 ,0 取反為 1。

2)位移運(yùn)算符:左移<< ,右移>> 。

  • << 每移動(dòng)一位,相當(dāng)于乘2,
  • >> 每移動(dòng)一位,相當(dāng)于除以2,如果不能整除,則向下取整。

看到這里,你也許沒懂位運(yùn)算符這部分到底在說什么……為了把這塊講明白,我會(huì)另外寫一篇文章。篇幅所限,這一次就不深入展開了~

就暫且先知道有這么個(gè)東西,下次填坑 ~


3 比較運(yùn)算符

最基本的: 小于<, 大于>,等于==,小于等于<=,大于等于>=,不等于!=。這些一看就明白,也無(wú)需解釋。


4 賦值運(yùn)算符

1)等于 =,很簡(jiǎn)單了,就是把右邊的值,打上左邊的標(biāo)簽。
2)+=,就是把右邊和左邊的原值相加,把左邊的值更新為相加后的新值。例如 a+=1 就等價(jià)于 a=a+1,但 a=a+1 沒有a+=1 的效率高。
3)同理還有 -=,* =,/=,%=,**=,//=。


5 身份運(yùn)算符

身份運(yùn)算符就是is 和 is not。這里說一下新手容易混淆的is,=,==這三個(gè)的區(qū)別。

1)先說 is 和 ==

  • is 比較兩個(gè)對(duì)象的 id 值是否相等,即,是否指向同一個(gè)內(nèi)存地址
  • == 比較的是兩個(gè)對(duì)象的內(nèi)容是否相等,即,值是否相等
a = "Python"
b = a
b == a
True

id(a)
2974848979888 # a的地址
id(b)
2974848979888 # b的地址和a相同
b is a
True

上面的例子當(dāng)中b和a的內(nèi)存地址是相同的,它們指向同一塊內(nèi)存,因而is 和 == 的結(jié)果都為True,這是因?yàn)橹苯淤x值都是對(duì)值的引用。如果b 和 a 指向了不同的內(nèi)存,那么 b is a 的結(jié)果為False,而 b==a的結(jié)果為True。

a = [1,2,3]
b = [1,2,3]
print(a == b)
True

id(a)
2974887936648
id(b)
2974887936456 # a、b兩個(gè)列表里的元素雖然相同,但是地址不同
print(a is b)
False

最后還有一點(diǎn)要注意,Python僅對(duì)比較小的整數(shù)對(duì)象進(jìn)行緩存(范圍為[-5, 256]),并非是所有整數(shù)對(duì)象。
舉個(gè)例子說明只有小的整數(shù)對(duì)象[-5,256]被放入緩存供重復(fù)使用:

a = 1
b = 1
print(a == b)
True
print(a is b)
True

a = 257
b = 257
print(a == b)
True
print(a is b)
False

但是,這種情況僅在命令行中執(zhí)行才有,當(dāng)在Pycharm或者保存為文件執(zhí)行,結(jié)果就不一樣了,這是因?yàn)榻忉屍髯隽艘徊糠謨?yōu)化。

2)再看 = 和 ==

這兩個(gè)比較好區(qū)分。

  • = 的含義是賦值,將某一數(shù)值賦給某個(gè)變量,比如a=3,將3這個(gè)數(shù)值賦予給a;
  • == 是判斷是否相等,返回True 或 False。比如1 == 1,他們是相等的,就返回True;1==2,他們是不相等的,那么就返回False。
a = [1,2]
b = [1,2]
c = a
print(a == b)
True
print(a is b)
False
print(a is c)
True

3)!= 和 is not

  • 雙等號(hào) == 和不等號(hào) != 判斷是否相等;
  • is 和 is no t判斷是否是同一個(gè)對(duì)象。
a = [1,2,3]
b = [1,2,3]

print(a == b)
True
print(a != b)
False

print(a is b)
False
print(a is not b)
True


6 成員運(yùn)算符

in 和 not in,用于判斷元素是否在當(dāng)前對(duì)象中

print('ab' in 'abc')
True

print(a in ['a','b','c'])
False

print('a' in ['a','b','c'])
True

print(['a','b'] in ['a','b','c'])
False

print(['a','b'] not in ['a','b','c'])
True


7 邏輯運(yùn)算符

優(yōu)先級(jí):not > and > or。

  • and 兩側(cè)都是True則返回True,否則返回False;
  • or 兩側(cè)都是False則返回False,否則返回True。

短路現(xiàn)象

  • and 前面的表達(dá)式為False,則后面的表達(dá)式不執(zhí)行;
  • or 前面的表達(dá)式為True,則后面的表達(dá)式不執(zhí)行。
print(1 > 2 and  3 < 2 or not 4 > 5) 
True 

拆解一下上面的例子,1 > 2 and 3 < 2 or not 4 > 5。

  1. 因?yàn)楸容^運(yùn)算符優(yōu)先級(jí)高于邏輯運(yùn)算符,所以第一步轉(zhuǎn)化成 False and False or not False;
  2. 因?yàn)?not 優(yōu)先級(jí)大于 and,所以轉(zhuǎn)化成 False and False or True;
  3. 因?yàn)?and 優(yōu)先級(jí)大于 or,所以轉(zhuǎn)化成 False or True;
  4. 最后結(jié)果是True。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評(píng)論 6 530
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 97,947評(píng)論 3 413
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,094評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,485評(píng)論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,268評(píng)論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,817評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,039評(píng)論 0 285
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,551評(píng)論 1 331
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,502評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,662評(píng)論 1 366
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評(píng)論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,907評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,304評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,563評(píng)論 1 281
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,255評(píng)論 3 389
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,637評(píng)論 2 370