[轉(zhuǎn)]Python徹底搞懂 變量、運(yùn)算符、in、id()、 is 與 ==的區(qū)別

一、變量

變量,是用來(lái)存儲(chǔ)數(shù)據(jù),

如果我們需要讓得到的數(shù)據(jù)在后面的程序中進(jìn)行運(yùn)算,就需要先存儲(chǔ)在變量中,在需要使用時(shí)再引用事先存儲(chǔ)的變量。

它是【可變化的量】,它的概念和代數(shù)中定義的變量基本一致。

如:y=2*x,x 就是變量,x 的值不同y的值也就不同。

不同點(diǎn)在計(jì)算機(jī)中 y 也是個(gè)變量,計(jì)算機(jī)計(jì)算出 2*x 的值賦值給了變量y。

x 與 y 為變量的名稱(chēng),我們通過(guò)變量的名稱(chēng)在后續(xù)程序中引用變量。

每個(gè)變量都有名稱(chēng)(名稱(chēng)使用標(biāo)識(shí)符規(guī)范命名),叫變量名。Python 變量名可以是大小寫(xiě)英文、數(shù)字和下劃線(_)的組合,但不能用數(shù)字開(kāi)頭。如:a=1,a_01=2,_a=3 中 a、a_01、_a 都是變量。

注意:Python 中的變量不能以數(shù)字開(kāi)頭,但可以使用下劃線(_)開(kāi)頭,變量名區(qū)分大小寫(xiě),變量A與a是不同的。

Python 中的變量為動(dòng)態(tài)類(lèi)型,所以我們定義變量時(shí)無(wú)需指定變量類(lèi)型,我們可以給變量任何數(shù)據(jù)類(lèi)型的值。

如下:

a=1# 純字母 a='abc'# 動(dòng)態(tài)類(lèi)型,變量無(wú)固定類(lèi)型,可以重新賦值任意類(lèi)型值 a_01='我是變量'# 字母數(shù)字下劃線混合 _a=True# 以下劃線開(kāi)始 12A='a'# 報(bào)錯(cuò),不能以數(shù)字開(kāi)始定義變量

注意:

定義變量的‘=’與數(shù)學(xué)中的‘=’意義是不同的,

Python 中的等號(hào)左邊是變量名字,右邊是值,

'=' 表示將右邊的值傳遞給左邊,

所以 '=' 是右連接性,值的傳遞順序是從右到左。

二、運(yùn)算符

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

加(+)、減(-)、乘(*)、除(/)、取模(%)、冪(**)、取整(//)

加、減、乘、除和數(shù)學(xué)運(yùn)算的一樣,不多講。

取模(%)是返回除法的余數(shù)(23%10余3,所以值為3)。

冪(x**y)表示 x 的 y 次冪( 2**3 的值為 8)。

取整(//) 為取商的整數(shù)部分,如10//3 值為3, 9.0//2.0 值為 4.0

取整又叫地板除:詳細(xì)見(jiàn):“地板除”還是“取整除”?地板除和天花板除floor division和ceil devision

示例:

# 使用Python 自帶的 IDLE 逐條練習(xí)以下代碼 a=23b=10c=0print('a + b=',a+b)# 輸出? a + b= 33 print('a - b=',a-b)# 輸出? a - b= 13 print('a * b=',a*b)# 輸出? a * b= 230 print('a / b=',a/b)# 輸出? a / b= 2.3 print('a % b=',a%b)# 輸出? a % b= 3 c=a+b/b*a+b# 對(duì)變量重新賦值會(huì)改變變量的值 print(c)# 輸出 56.0 # 修改變量 a 、b 、ca=2b=3c=a**bprint("a ** b =",c)# 輸出? a ** b = 8 a=10b=5c=a//bprint("a // b =",c)# 輸出? a // b = 2

2、比較運(yùn)算符

也和數(shù)學(xué)中的比較運(yùn)算概念一樣。

等于(==)、不等于(!=)、大于(>)小于(<)、大于等于(>=)、小于等于(<=),比較運(yùn)算符返回的結(jié)果為 True 或 False 。

示例:

#使用Python 自帶的 IDLE 逐條練習(xí)以下代碼

a = 23

b = 10

c = 0

print('a == b為', a == b) # 輸出? a == b為 False

print('a != b為', a != b) # 輸出? a != b為 True

print('a > b為', a > b) # 輸出? a > b為 True

print('a < b為', a < b) # 輸出? a < b為 False

print('a >= b為', a >= b) # 輸出? a >= b為 True

print('a <= b為', a <= b) # 輸出? a <= b為 False

3、邏輯運(yùn)算符

用于連接比較運(yùn)算符,先計(jì)算比較運(yùn)算符,然后進(jìn)行邏輯運(yùn)算。

與(and)、或(or)、非(not),邏輯運(yùn)算符返回的結(jié)果為T(mén)rue或False。

示例:

a=23b=10c=30print('a == b and b>c 為',a==bandb>c)# False print('a > b or c>=b 為',a>borc>=b)# True print('a < b and c>=b 為',a<borc>=b)# True print('a <= b and not a<b為',a>=banda>b)# True print('a > b 為',a>b)# True print('not a > b 為',nota>b)# False print('a <= b and not a<b為',a>=bandnota>b)# False

4、成員運(yùn)算符

判斷元素是否為序列中的成員,用于確認(rèn)元素是否在序列中。

in

在指定的序列中找到值返回 True,

否則返回 False。

如:x 在 y 序列中 , 如果 x 在 y 序列中返回 True。

not in

在指定的序列中沒(méi)有找到值返回 True,

否則返回 False,

與 in 是相反的。

示例:

a='a'b=2list=[1,2,3,4,5,'b','a']# 定義列表,列表使用數(shù)據(jù)結(jié)構(gòu)類(lèi)型 print(ainlist)# True print(anotinlist)# False print(binlist)# True print(bnotinlist)# False print(9inlist)# False print(9notinlist)# True print('c'inlist)# False print('c'notinlist)# True print('c'in'abc')# True? 字符串也可以當(dāng)成列表

5、身份運(yùn)算符

用于比較兩個(gè)對(duì)象的存儲(chǔ)單元。

is

判斷兩個(gè)標(biāo)識(shí)符是否引用自同一個(gè)對(duì)象,

x is y 如果引用的是同一個(gè)對(duì)象則返回 True,

否則返回 False。

is not

判斷兩個(gè)標(biāo)識(shí)符是否引用自不同個(gè)對(duì)象,

與is相反。

注意:id() 函數(shù)可以幫助我們獲取變量存儲(chǔ)在內(nèi)存中的地址。

a=20b=20print(id(a))print(id(b))print(aisb)# True b=12# 改變b的值 print(id(b))print(aisb)# False

輸出結(jié)果:

1571488816

1571488816

True

1571488560

False

拓展:is 與 == 的區(qū)別

Python 一切皆對(duì)象,

每個(gè)對(duì)象都有唯一的身份標(biāo)識(shí)(id),

而且每個(gè)對(duì)象都有自己的類(lèi)型(type)和值(value)。

所以?id, type, value 是Python對(duì)象的三個(gè)基本要素。

常用的賦值(=) 操作,其實(shí)是身份標(biāo)識(shí)(id)的傳遞,片面的理解是內(nèi)存地址的傳遞。(因?yàn)榭勺償?shù)據(jù)類(lèi)型()和不可變數(shù)據(jù)類(lèi)型(int float string))

is?比較的是id,

==?比較的是type?和?value。

當(dāng)id相同時(shí),

它的typevalue肯定相同,

但當(dāng)type與value相同時(shí),

id不一定相同。

示例: type 與 value相同,id 不同

a=b=[1,2]c=[1,2]print(a==c)# True print(aisb)# True print(aisc)# False #

說(shuō)明:

第一行,a 與 b 賦值時(shí)被指向了同一個(gè)id

第二行,c 再次創(chuàng)建一個(gè)列表,它的id也是新創(chuàng)建。

原因可能是可變數(shù)據(jù)類(lèi)型和不可變數(shù)據(jù)類(lèi)型。可查看:

Python基礎(chǔ)入門(mén):列表、元組、字符串、字典、集合、序列-阿里云天池 --4字典部分

version<3.5 , Python為了提高速度使用了小整數(shù)[-5, 257)和新創(chuàng)建的字符串加入了通用對(duì)象池(類(lèi)似緩存),即啟動(dòng)編譯器時(shí)[-5, 257)已經(jīng)再內(nèi)存中。

version>=3.5, 將數(shù)值加入了通用對(duì)象池,當(dāng)你創(chuàng)建字符串和數(shù)值時(shí),他們都會(huì)加入通用對(duì)象池。

x=100y=100# [-5, 257)的整數(shù)已在內(nèi)存中定義好,引用時(shí)直接將id傳遞給對(duì)應(yīng)的變量 print(xisy)# True i=257j=257print(iisj)# version<3.5 False, version>=3.5? True # 說(shuō)明: Python 3.5 及以后的版本對(duì)此進(jìn)行了優(yōu)化 #3.5 及以后版本數(shù)值與字符串都加入了對(duì)象池 s='abc'r='abc'print(sisr)# True # 拓展:可用于判定變量的類(lèi)型 print(type(x)isint)# True print(type(s)isstr)# True

注意:運(yùn)算符的優(yōu)先級(jí),算術(shù)運(yùn)算符優(yōu)先,然后身份運(yùn)算符,再成員運(yùn)算符,最后邏輯運(yùn)算符。

總結(jié):

2018年1月19日,第一次修改,個(gè)別錯(cuò)別字與語(yǔ)法問(wèn)題,代碼加上注釋。

2019年2月25日,第二次修改,增加思維導(dǎo)圖

2019年7月7日,第三次修改,修改身份運(yùn)算符,增加is 與 == 的區(qū)別,修改思維導(dǎo)圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容