Python中還有一種常見的操作就是運(yùn)算符和操作對(duì)象泳姐,運(yùn)算符是特殊符號(hào)的集合乍赫,之前我們數(shù)學(xué)中學(xué)習(xí)過(guò)的的加(+)、減(-)猛铅、乘(*)字支、除(/)等都屬于運(yùn)算符,而被運(yùn)算符連接起來(lái)的就被稱為操作對(duì)象。
? ? ? ?Python目前支持7種運(yùn)算符堕伪,包括:算術(shù)運(yùn)算符揖庄、比較(關(guān)系)運(yùn)算符、賦值運(yùn)算符欠雌、邏輯運(yùn)算符抠艾、位運(yùn)算符、成員運(yùn)算符和身份運(yùn)算符桨昙。
? ? ? ? ?定義變量a = 9? b = 5,下方的操作結(jié)果為:
運(yùn)算符描述實(shí)例
+加:兩個(gè)對(duì)象相加a+b汰瘫,輸出結(jié)果為:14
-減:得到負(fù)數(shù)或一個(gè)數(shù)減去另一個(gè)數(shù)a-b狂打,輸出結(jié)果為:4
*乘:兩個(gè)數(shù)相乘或返回一個(gè)被重復(fù)若干次的字符串a(chǎn)*b,輸出結(jié)果為:45
/除:a除以ba/b混弥,輸出結(jié)果為:1.8
%取模:返回除法的余數(shù)a%b趴乡,輸出結(jié)果為:4
**冪:返回a的b次冪a**b是9的5次方,輸出結(jié)果為:59049
//取整除(地板除):返回商的整數(shù)部分a//b蝗拿,輸出結(jié)果為:1
? ? ? ?操作結(jié)果截圖如下:
補(bǔ)充點(diǎn):
? ? ? ?電腦的操作系統(tǒng)支持內(nèi)存字節(jié)數(shù)有32位和64位的區(qū)分晾捏,而現(xiàn)在絕大多數(shù)電腦都使用支持64位的操作系統(tǒng)。支持32位的系統(tǒng)哀托,最大支持內(nèi)存的字節(jié)數(shù)就是2的32次冪惦辛,即2**32;同理64位的系統(tǒng)仓手,最大支持內(nèi)存的字節(jié)數(shù)就是2的64次冪胖齐。我們使用轉(zhuǎn)換來(lái)看下各自的支持內(nèi)存有多大。我們知道流量的基本轉(zhuǎn)化規(guī)律:1KB = 1024B俗或;1MB = 1024KB市怎;1GB = 1024MB。
? ? ? ?那么2**32個(gè)字節(jié)換算成GB應(yīng)該是2**32/1024/1024/1024=2**2=4GB辛慰,即32位系統(tǒng)最大支持內(nèi)存的字節(jié)數(shù)是4GB区匠,現(xiàn)在一般手機(jī)內(nèi)存都比一臺(tái)32位的電腦高,所以現(xiàn)在電腦出廠都支持64位的系統(tǒng)。那么64位的系統(tǒng)最大支持內(nèi)存的字節(jié)數(shù)是多少呢驰弄?大家可以自行練習(xí)一下麻汰。
? ? ?定義變量a = 10 b = 20,下方的操作結(jié)果為:
運(yùn)算符描述實(shí)例
==等于:比較對(duì)象是否相等(a==b)返回結(jié)果為False
!=不等于:比較兩個(gè)對(duì)象是否不相等(a!=b)返回結(jié)果為True
>大于:返回a是否大于b(a>b)返回結(jié)果為False
<小于:返回a是否小于b戚篙。(a<b)返回結(jié)果為True
>=大于等于:返回a是否大于等于b(a>=b)返回結(jié)果為False
<=小于等于:返回a是否小于等于b(a<=b)返回結(jié)果為True
??? 操作結(jié)果截圖如下:?
? ? ? ?PS:在部分需要標(biāo)注True和False的地方五鲫,為了記錄方便,會(huì)選擇1來(lái)代表True岔擂,0代表False位喂,這種處理方式也屬于合理的表達(dá)方式。
? ? ? 定義變量a = 5 b = 10乱灵,下方的操作結(jié)果為:
運(yùn)算符描述實(shí)例
=簡(jiǎn)單的賦值運(yùn)算符c=a+b塑崖,將a+b的運(yùn)算結(jié)果賦值給c
+=加法賦值運(yùn)算符c+=a,等效于c=c+a
-=減法賦值運(yùn)算符c-=a痛倚,等效于c=c-a
*=乘法賦值運(yùn)算符C*=a规婆,等效于c=c*a
/=除法賦值運(yùn)算符c/=a,等效于c=c/a
%=取模賦值運(yùn)算符c%=a蝉稳,等效于c=c%a
**=冪賦值運(yùn)算符c**=a抒蚜,等效于c=c**a
//=取整(地板)除賦值運(yùn)算符c//=a,等效于c=c//a
? ?操作結(jié)果截圖如下:
? ? ? ?關(guān)于除法賦值運(yùn)算符耘戚,即便兩個(gè)變量是整型嗡髓,計(jì)算出來(lái)的結(jié)果也是浮點(diǎn)數(shù)類型,這是Python解釋器里面的內(nèi)置方法決定的毕莱。如果需要計(jì)算結(jié)果為整型器贩,可以使用地板除。
? ? ? ?定義變量a = 60 b = 13朋截,操作結(jié)果如下方所示:
運(yùn)算符描述實(shí)例
&按位與運(yùn)算符:若參與運(yùn)算的兩個(gè)值的兩個(gè)相應(yīng)位都為1蛹稍,則該位的結(jié)果為1;否則為0(a&b)輸出結(jié)果為12部服,二進(jìn)制解釋:0000 1100
|按位或運(yùn)算符:只要對(duì)應(yīng)的兩個(gè)二進(jìn)制位有一個(gè)位1唆姐,結(jié)果位就為1(a|b)輸出結(jié)果61,二進(jìn)制解釋:0011 1101
^按位異或運(yùn)算符:當(dāng)兩個(gè)對(duì)應(yīng)的二進(jìn)制位相異時(shí)廓八,結(jié)果為1(a^b)輸出結(jié)果為49奉芦,二進(jìn)制解釋:0011 0001
~按位取反運(yùn)算符:對(duì)數(shù)據(jù)的每個(gè)二進(jìn)制位取反,即把1變?yōu)?剧蹂,把0變?yōu)?(~a)輸出結(jié)果為-61声功,
二進(jìn)制解釋:1100 0011
<<左移動(dòng)運(yùn)算符:運(yùn)算數(shù)的各個(gè)二進(jìn)制位全部左移若干位,由<<右邊的數(shù)指定移動(dòng)的位數(shù)宠叼,高位丟棄先巴,低位補(bǔ)0a << 2輸出結(jié)果240其爵,二進(jìn)制解釋:1111 0000
>>右移動(dòng)運(yùn)算符:把>>左邊運(yùn)算數(shù)的各個(gè)二進(jìn)制位全部右移若干位,>>右邊的運(yùn)算數(shù)指定移動(dòng)的位數(shù)a >> 2輸出結(jié)果15伸蚯,二進(jìn)制解釋:0000 1111
? ? 操作結(jié)果截圖如下:
? ? ? ?按位取反運(yùn)算符操作摩渺,按位取反的操作流程是對(duì)數(shù)字先進(jìn)行二進(jìn)制顯示,然后按位取反(即每一位數(shù)的0變成1剂邮,1變成0)獲得新的碼數(shù)摇幻。再將新碼數(shù)取反碼,過(guò)程中符號(hào)位(即第一位數(shù)字)除外挥萌。獲得的反碼再在末位加一绰姻,即可獲得按位取反的值。舉例如下:
? ? ? ?取a = 13的按位取反值:
? ? ? ?第一步引瀑,13的二進(jìn)制顯示為:0000 1101
? ? ? ?第二步龙宏,按位取反獲得結(jié)果為:1111 0010
? ? ? ?第三步,取反碼結(jié)果為:1000 1101(此處第一位是符號(hào)位伤疙,不要變化)
? ? ? ?第四步,末位加一結(jié)果為:1000 1110(如果末尾為1的話辆影,加一的結(jié)果是末尾位變?yōu)?徒像,向前一位進(jìn)1,以此類推即可)蛙讥。
? ? ? ?第五步锯蛀,因?yàn)槭孜皇?,所以是負(fù)數(shù)次慢;剩余位數(shù)計(jì)算二進(jìn)制即可旁涤。1000 1110除首位外,計(jì)算二進(jìn)制為:1*2**3+1*2**2+1*2**1=14迫像,加上負(fù)號(hào)后結(jié)果為-14劈愚。
? ? ? ?也可以記憶一個(gè)比較簡(jiǎn)單的公式即~a = -(a+1)該公式適用于正數(shù)和負(fù)數(shù)。
? ? ? ?定義變量a = 10 b = 20舔箭,操作結(jié)果如下方所示:
運(yùn)算符邏輯表達(dá)式描述實(shí)例
anda and b布爾“與”:如果a為False罩缴,a and b就返回False;否則就返回b的計(jì)算值(a and b)返回20
ora or b布爾“或”:如果a為非0,a or b就返回a的值靴庆;否則返回b的計(jì)算值(a or b)返回10
notnot a布爾“非”:如果a為True时捌,not a就返回False;如果a為False炉抒,not a就返回TrueNot(a and b)返回False
? ?操作結(jié)果截圖如下:
? ? ?and運(yùn)算符操作的運(yùn)算步驟為:
? ? ? ? and是在布爾上下文中從左到右計(jì)算表達(dá)式的值奢讨;
? ? ? ? 0、’’焰薄、[]拿诸、()、{}塞茅、None亩码、False在布爾上下文中為假;其它任何東西都為真野瘦;
? ? ? ? 如果布爾上下文中的某個(gè)值為假描沟,則返回第一個(gè)假值;
? ? ? ? 所有值都為真鞭光,則返回最后一個(gè)真值吏廉。
? ? ? or運(yùn)算符操作
? ? ? ? 如果表達(dá)式中存在真值,則返回第一個(gè)真值
? ? ? ? 所有值都為假返回最后一個(gè)假值
????? 定義變量a = 5 b = [2,5,9,8,15,20,7]
運(yùn)算符描述實(shí)例
in如果在指定的序列中找到值惰许,就返回True席覆;否則返回False如果a在b序列中,就返回True汹买。
not in如果在指定的序列中沒有找到值佩伤,就返回True;否則就返回False如果a不在序列中晦毙,就返回True
? ? ?操作結(jié)果截圖如下:
????? 定義變量a = 10 b = 10
運(yùn)算符描述實(shí)例
isis判斷兩個(gè)標(biāo)識(shí)符是否引用自一個(gè)對(duì)象a is b生巡,,如果id(a)等于id(b)见妒,(a is b)結(jié)果為True
is notis not用于判斷兩個(gè)標(biāo)識(shí)符是否引用自不同對(duì)象a is not b障斋,,如果id(a)不等于id(b)徐鹤,(a is not b)結(jié)果為True
? ?操作結(jié)果截圖如下:
運(yùn)算符描述
**指數(shù)(最高優(yōu)先級(jí))
~ + -按位翻轉(zhuǎn)垃环,一元加號(hào)和減號(hào)(最后兩個(gè)的方法名為+@和-@)
* / % //乘、除返敬、取模和取整除
+ -加法遂庄、減法
>> <<右移左移運(yùn)算符
&位運(yùn)算符 AND
^ |位運(yùn)算符
<= < > >=比較運(yùn)算符
== !=等于不等于運(yùn)算符
= %= /= //= -= += *= **=賦值運(yùn)算符
is is not身份運(yùn)算符
in not in成員運(yùn)算符
not or and邏輯運(yùn)算符
? ? ? ?運(yùn)算符優(yōu)先級(jí)遵循PEMDAS規(guī)則,括號(hào)(Parentheses劲赠,P)擁有最高優(yōu)先級(jí)涛目,其次是乘方(Exponentiation秸谢,E),再往后的優(yōu)先級(jí)是乘法(Multiplication霹肝,M)和除法(Division估蹄,D),再次級(jí)是加法(Addition沫换,A)和減法(Subtraction臭蚁,S)。如果優(yōu)先級(jí)相同的話讯赏,操作順序按照從左向右求值即可垮兑。