文章目錄
1 算術(shù)運算符
2 位運算符
3 比較運算符
4 賦值運算符
5 身份運算符
6 成員運算符
7 邏輯運算符
今天總結(jié)一下Python中七大運算符的意義仅孩,本文大體是按照運算符的優(yōu)先級排序的亚脆,看目錄就知道各個運算符的優(yōu)先級高低啦~~
1 算術(shù)運算符
指數(shù)** 優(yōu)先級最高堕花,其次是 乘*很澄,除/,取整//框往,取余%焚廊,最后是 加+,減-撤防。
這里重點說下/虽风,//,%寄月,其他運算符很簡單辜膝,不用多解釋了吧。
1)一個斜杠/漾肮,除法厂抖,兩個int相除也保留小數(shù)。
3/2 = 1.5
10/3 = 3.3333333333333335
4/2 = 2.0
2)兩個斜杠//克懊,對除法結(jié)果向下取整忱辅。當//兩側(cè)存在浮點型時,結(jié)果取整的基礎(chǔ)上會保留.0谭溉。
3//2 = 1
-3//2 = -2 # 向下取整就是向數(shù)值小的那一方向取整墙懂,所以是-2
4//2 = 2
4//2.0 = 2.0
3)百分號%,取模扮念,返回除法的余數(shù)损搬。%兩側(cè)必須是整數(shù),當存在存在負整數(shù)時,余數(shù)符號與%右邊的一致巧勤。
5%3 = 2
-3%2 = 1
3%(-2) = -1 # 符號與-2一致嵌灰,所以是-1
4%2 = 0
4%2.0 = 0.0
2 位運算符
按位運算符是基于二進制來進行計算的,在二進制中 1 為 True颅悉,0 為 False:
1)位邏輯運算符: 與&伞鲫,或|,異或^签舞,取反~秕脓。
- & :按位與運算符,兩個二進制數(shù)相應(yīng)位都為1儒搭,則該位的結(jié)果為1吠架,否則為0;
- | :按位或運算符搂鲫,兩個二進制數(shù)相應(yīng)位有一個為1時傍药,結(jié)果位就為1;
- ^ :異或運算符魂仍,兩個二進制數(shù)相應(yīng)位相異時拐辽,結(jié)果為1;
- ~ :取反運算符擦酌,對二進制進行取反俱诸,即 1 取反為 0 ,0 取反為 1赊舶。
2)位移運算符:左移<< 睁搭,右移>> 。
- << 每移動一位笼平,相當于乘2园骆,
- >> 每移動一位,相當于除以2寓调,如果不能整除锌唾,則向下取整。
看到這里夺英,你也許沒懂位運算符這部分到底在說什么……為了把這塊講明白晌涕,我會另外寫一篇文章。篇幅所限秋麸,這一次就不深入展開了~
就暫且先知道有這么個東西渐排,下次填坑 ~
3 比較運算符
最基本的: 小于<, 大于>灸蟆,等于==驯耻,小于等于<=亲族,大于等于>=,不等于!=可缚。這些一看就明白霎迫,也無需解釋。
4 賦值運算符
1)等于 =帘靡,很簡單了知给,就是把右邊的值,打上左邊的標簽描姚。
2)+=涩赢,就是把右邊和左邊的原值相加,把左邊的值更新為相加后的新值轩勘。例如 a+=1 就等價于 a=a+1筒扒,但 a=a+1 沒有a+=1 的效率高。
3)同理還有 -=绊寻,* =花墩,/=,%=澄步,**=冰蘑,//=。
5 身份運算符
身份運算符就是is 和 is not村缸。這里說一下新手容易混淆的is祠肥,=,==這三個的區(qū)別王凑。
1)先說 is 和 ==
- is 比較兩個對象的 id 值是否相等搪柑,即聋丝,是否指向同一個內(nèi)存地址索烹;
- == 比較的是兩個對象的內(nèi)容是否相等,即弱睦,值是否相等百姓。
a = "Python"
b = a
b == a
True
id(a)
2974848979888 # a的地址
id(b)
2974848979888 # b的地址和a相同
b is a
True
上面的例子當中b和a的內(nèi)存地址是相同的,它們指向同一塊內(nèi)存况木,因而is 和 == 的結(jié)果都為True,這是因為直接賦值都是對值的引用垒拢。如果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兩個列表里的元素雖然相同屹耐,但是地址不同
print(a is b)
False
最后還有一點要注意尸疆,Python僅對比較小的整數(shù)對象進行緩存(范圍為[-5, 256]),并非是所有整數(shù)對象。
舉個例子說明只有小的整數(shù)對象[-5,256]被放入緩存供重復使用:
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í)行才有犯眠,當在Pycharm或者保存為文件執(zhí)行,結(jié)果就不一樣了症革,這是因為解釋器做了一部分優(yōu)化筐咧。
2)再看 = 和 ==
這兩個比較好區(qū)分。
- = 的含義是賦值噪矛,將某一數(shù)值賦給某個變量量蕊,比如a=3,將3這個數(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
- 雙等號 == 和不等號 != 判斷是否相等鸠删;
- is 和 is no t判斷是否是同一個對象抱完。
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 成員運算符
in 和 not in,用于判斷元素是否在當前對象中
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ōu)先級:not > and > or刃泡。
- and 兩側(cè)都是True則返回True巧娱,否則返回False;
- or 兩側(cè)都是False則返回False烘贴,否則返回True禁添。
短路現(xiàn)象:
- and 前面的表達式為False,則后面的表達式不執(zhí)行桨踪;
- or 前面的表達式為True老翘,則后面的表達式不執(zhí)行。
print(1 > 2 and 3 < 2 or not 4 > 5)
True
拆解一下上面的例子锻离,1 > 2 and 3 < 2 or not 4 > 5铺峭。
- 因為比較運算符優(yōu)先級高于邏輯運算符,所以第一步轉(zhuǎn)化成 False and False or not False汽纠;
- 因為 not 優(yōu)先級大于 and卫键,所以轉(zhuǎn)化成 False and False or True;
- 因為 and 優(yōu)先級大于 or虱朵,所以轉(zhuǎn)化成 False or True莉炉;
- 最后結(jié)果是True啤呼。