Python變量和數(shù)據(jù)類型詳解
1.Python變量和數(shù)據(jù)類型
1.1Python基礎(chǔ)數(shù)據(jù)類型
整數(shù)
二進(jìn)制數(shù)只使用數(shù)字0、1表示,在Python中,二進(jìn)制整數(shù)使用前綴0b表示,比如:0b0110
,0b1100
。
十六進(jìn)制數(shù)除了0~9十個(gè)數(shù)字以外,還使用a、b、c、d、e、f,在Python中,十六進(jìn)制使用前綴0x,比如:0x12ef
,0xde2431af
。
浮點(diǎn)數(shù)
二進(jìn)制數(shù)只使用數(shù)字0、1表示,在Python中,二進(jìn)制整數(shù)使用前綴0b表示,比如:0b0110
,0b1100
。
十六進(jìn)制數(shù)除了0~9十個(gè)數(shù)字以外,還使用a、b、c、d、e、f,在Python中,十六進(jìn)制使用前綴0x,比如:0x12ef
,0xde2431af
。
在Python中,把10用e替代,比如:1.23x10^9
就是1.23e9
,或者12.3e8
,0.000012
可以寫成1.2e-5
>>> 0.1+0.2 0.30000000000000004 >>> >>> 0.1+0.2 == 0.3 False >>> round(0.1+0.2,1) == 0.3 True >>>
點(diǎn)數(shù)間運(yùn)算存在不確定尾數(shù),不是Bug
在計(jì)算機(jī)中所有數(shù)字都是由2進(jìn)制表示
嚴(yán)格來(lái)說(shuō) 53位二進(jìn)制表示數(shù)字部分
由于二進(jìn)制和十進(jìn)制不存在嚴(yán)格的對(duì)等方式
所以0.1用二進(jìn)制表示是一個(gè)無(wú)限小數(shù)
計(jì)算機(jī)只能截取其中的53位 無(wú)限接近0.1
計(jì)算機(jī)只會(huì)顯示16位
round(x,d):對(duì)x進(jìn)行四舍五入 d是小數(shù)截取位數(shù)
字符串
在Python中,字符串是以'‘或""括起來(lái)的任意文本,比如'abc',“xyz"等等。請(qǐng)注意,''或”"本身只是一種表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c這3個(gè)字符。
比如之前練習(xí)過(guò)的第一個(gè)Python程序:print('Hello World'),
其中的Hello World
就是字符串。
布爾值
在Python中,可以直接用True、False表示布爾值(請(qǐng)注意大小寫,不需要使用字符串符號(hào)括起來(lái)),也可以通過(guò)布爾運(yùn)算計(jì)算出來(lái)。
布爾值可以用**and、or和not運(yùn)算**(注意and,or,not都是Python語(yǔ)言本身的關(guān)鍵字)。
and運(yùn)算是與運(yùn)算,只有所有都為 True,and運(yùn)算結(jié)果才是 True。
or運(yùn)算是或運(yùn)算,只要其中有一個(gè)為 True,or 運(yùn)算結(jié)果就是 True。
not運(yùn)算是非運(yùn)算,它是一個(gè)單目運(yùn)算符,把 True 變成 False,F(xiàn)alse 變成 True。
空值
空值是Python里一個(gè)特殊的值,用None表示。None是一個(gè)特殊的空值。
此外,Python還提供了列表、字典等多種數(shù)據(jù)類型,還允許創(chuàng)建自定義數(shù)據(jù)類型
1.2Python定義變量的方法
合法的變量名
1.變量名由大小寫英文字母、數(shù)字和下劃線_組成
2.變量不能用數(shù)字開(kāi)頭
3.變量盡量不要和Python關(guān)鍵字重合(比如前面學(xué)習(xí)過(guò)的:and、or、not,否則可能導(dǎo)致Python原有關(guān)鍵字發(fā)揮不出作用)
以下這些變量的定義都是合法的。
num, count, _none, min_value
他們都滿足上面的三個(gè)條件。
以下這些變量的定義都是不合法的。
1num, 666, 1_cd, and
定義變量
定義變量的方式很簡(jiǎn)單,通過(guò)變量名
= 數(shù)據(jù)
,即可定義一個(gè)變量。
舉個(gè)例子:
a = 1
在這個(gè)例子里面,a就是變量,它的值是一個(gè)整數(shù)1。
hello = 'Hello'
在這個(gè)例子里面,hello就是變量,它的值是一個(gè)字符串'Hello'。
在Python里面,一個(gè)變量可以先后存儲(chǔ)多種不同類型的數(shù)據(jù)。
a = 1 # 這個(gè)時(shí)候a存儲(chǔ)的是整數(shù)類型 print(a) a = 'ABC' # 這個(gè)時(shí)候a存儲(chǔ)的是字符串類型 print(a)
這是Python這類語(yǔ)言特有的特性,我們稱之為動(dòng)態(tài)語(yǔ)言,與之對(duì)應(yīng)的是靜態(tài)語(yǔ)言,Python、Javascript等等都是動(dòng)態(tài)語(yǔ)言,Java、C、C++等等屬于靜態(tài)語(yǔ)言。
1.3Python的整數(shù)與浮點(diǎn)數(shù)
四則運(yùn)算
整數(shù)、浮點(diǎn)數(shù)可以直接進(jìn)行四則運(yùn)算。
# 加法 num1 = 10 num2 = 0.5 result = num1 + num2 print(result) # ==> 10.5 # 減法 result = num1 - num2 print(result) # ==> 9.5 # 乘法 result = num1 * num2 print(result) # ==> 5.0 # 除法 result = num1 / num2 print(result) # ==>20.0
從上面可以發(fā)現(xiàn)一個(gè)規(guī)律,整數(shù)和浮點(diǎn)數(shù)運(yùn)算后 ,得到的結(jié)果不管小數(shù)點(diǎn)后是否有值,結(jié)果都變成浮點(diǎn)數(shù)了,這是合理的,浮點(diǎn)數(shù)可以表達(dá)整數(shù)的結(jié)果,但是整數(shù)不能表達(dá)浮點(diǎn)數(shù)的結(jié)果。
注意:在Python2使用除法可能和Python3得到不一樣的結(jié)果
# python2 num1 = 10 num2 = 3 result = num1 / num2 print(result) # ==> 3 # python3 num1 = 10 num2 = 3 result = num1 / num2 print(result) # ==> 3.3333333333333335
可以看到在python2,得到的是一個(gè)整數(shù)的結(jié)果,這是因?yàn)槌龜?shù)和被除數(shù)都是整數(shù)時(shí),得到的結(jié)果也默認(rèn)保存為整數(shù)了,這是非常不科學(xué)的,因此在python3,改進(jìn)了這一點(diǎn)。
取模運(yùn)算
Python數(shù)字支持取模運(yùn)算,使用百分號(hào)%表示取模。
print(3 % 2) # ==> 1 print(33 % 10) # ==> 3 print(99 % 30) # ==> 9
恰當(dāng)使用取模運(yùn)算,可以判斷一個(gè)數(shù)是否為偶數(shù),當(dāng)一個(gè)數(shù)對(duì)2取模結(jié)果為0時(shí),則這個(gè)數(shù)為偶數(shù),否則為奇數(shù)。
print(3 % 2) # ==> 1 因此3為奇數(shù) print(33 % 2) # ==> 1 因此33為奇數(shù) print(100 % 2) # ==> 0 因此100為偶數(shù)
地板除
Python除了普通除法以外,還有一個(gè)特殊的除法被稱為地板除,對(duì)于地板除,得到的結(jié)果會(huì)忽略純小數(shù)的部分,得到整數(shù)的部分,地板除使用//進(jìn)行。
10//4 # ==> 2 10//2.5 # ==> 4.0 10//3 # ==> 3
小數(shù)點(diǎn)位數(shù)
使用Python計(jì)算小數(shù)的時(shí)候,經(jīng)常需要保留小數(shù)點(diǎn)后若干位,可以使用round()函數(shù)來(lái)處理,這里先了解round的調(diào)用方式,使用兩個(gè)參數(shù),第一個(gè)是需要保留小數(shù)點(diǎn)位數(shù)的數(shù)值,第二個(gè)是保留的位數(shù)。
num = 10 / 3 print(num) # ==> 3.3333333333333335 # 使用round保留兩位小數(shù) round(num, 2) # ==> 3.33
1.4Python的布爾類型
與運(yùn)算
只有兩個(gè)布爾值都為 True 時(shí),計(jì)算結(jié)果才為 True。
或運(yùn)算
只要有一個(gè)布爾值為 True,計(jì)算結(jié)果就是 True。
非運(yùn)算
把True變?yōu)镕alse,或者把False變?yōu)門rue。
Python把0、空字符串和None看成False,其他數(shù)值和非空字符串都看成True,需要注意的是,not計(jì)算的優(yōu)先級(jí)是高于and和or的。
短路計(jì)算
1.在計(jì)算a and b時(shí),如果 a 是 False,則根據(jù)與運(yùn)算法則,整個(gè)結(jié)果必定為 False,因此返回 a;如果 a 是 True,則整個(gè)計(jì)算結(jié)果必定取決與 b,因此返回 b。
2.在計(jì)算a or b時(shí),如果 a 是 True,則根據(jù)或運(yùn)算法則,整個(gè)計(jì)算結(jié)果必定為 True,因此返回 a;如果 a 是 False,則整個(gè)計(jì)算結(jié)果必定取決于 b,因此返回 b。
1.5Python的字符串
符串既包含'又包含"怎么辦?
需要對(duì)字符串中的某些特殊字符進(jìn)行“轉(zhuǎn)義”,Python字符串用\進(jìn)行轉(zhuǎn)義。
要表示字符串Bob said "I'm OK"
由于'和"會(huì)引起歧義,因此,我們?cè)谒懊娌迦胍粋€(gè)\表示這是一個(gè)普通字符,不代表字符串的起始,因此,這個(gè)字符串又可以表示為
'Bob said \"I\'m OK\".'
注意:轉(zhuǎn)義字符 \
不計(jì)入字符串的內(nèi)容中。
常用的轉(zhuǎn)義字符還有:
\n
表示換行
\t
表示一個(gè)制表符
\\
表示 \
字符本身
1.6Python中raw字符串與多行字符串
- 為了避免對(duì)每一個(gè)字符轉(zhuǎn)義很麻煩的情況,我們可以在字符串前面加個(gè)前綴 r,表示這是一個(gè)raw字符串,里面的字符就不需要轉(zhuǎn)義了。
d=r'\(~_~)/ \(~_~)/' print(d)
- 如果要表示多行字符串,可以用'''...'''表示:
'''Line 1 Line 2 Line 3'''
- 上面這個(gè)字符串的表示方法和下面的是完全一樣的:
‘Line 1\nLine 2\nLine 3'
- 還可以在多行字符串前面添加r,把這個(gè)多行字符串也變成一個(gè)raw字符串:
r'''Python is created by "Guido". It is free and easy to learn. Let's start learn Python in imooc!'''
1.7 Python的字符串format
需要使用format來(lái)處理字符串,輸出不固定的內(nèi)容。
字符串format由兩個(gè)部分組成,字符串模板和模板數(shù)據(jù)內(nèi)容組成,通過(guò)大括號(hào){},就可以把模板數(shù)據(jù)內(nèi)容嵌到字符串模板對(duì)應(yīng)的位置。
# 字符串模板 template = 'Hello {}' # 模板數(shù)據(jù)內(nèi)容 world = 'World' result = template.format(world) print(result) # ==> Hello World
如果模板中{}比較多,則容易錯(cuò)亂,那么在format的時(shí)候也可以指定模板數(shù)據(jù)內(nèi)容的順序。
# 指定順序 template = 'Hello {0}, Hello {1}, Hello {2}, Hello {3}.' result = template.format('World', 'China', 'Beijing', 'imooc') print(result) # ==> Hello World, Hello China, Hello Beijing, Hello imooc. # 調(diào)整順序 template = 'Hello {3}, Hello {2}, Hello {1}, Hello {0}.' result = template.format('World', 'China', 'Beijing', 'imooc') print(result) # ==> Hello imooc, Hello Beijing, Hello China, Hello World.
除了使用順序,還可以指定對(duì)應(yīng)的名字,使得在format過(guò)程更加清晰。
# 指定{}的名字w,c,b,i template = 'Hello {w}, Hello {c}, Hello , Hello {i}.' world = 'World' china = 'China' beijing = 'Beijing' imooc = 'imooc' # 指定名字對(duì)應(yīng)的模板數(shù)據(jù)內(nèi)容 result = template.format(w = world, c = china, b = beijing, i = imooc) print(result) # ==> Hello World, Hello China, Hello Beijing, Hello imooc.
1.8Python的字符串編碼
- Unicode把所有語(yǔ)言都統(tǒng)一到一套編碼里,這樣就不會(huì)再有亂碼問(wèn)題了。
- Unicode通常用兩個(gè)字節(jié)表示一個(gè)字符,原有的英文編碼從單字節(jié)變成雙字節(jié),只需要把高字節(jié)全部填為0就可以。
在python3中,中文字符串和英文字符串無(wú)異。
1.9Python的字符串切片
字符串由一個(gè)個(gè)字符組成,每一個(gè)字符都有一個(gè)唯一的位置。比如字符串'ABC',第一個(gè)字符是A,第二個(gè)字符是B,第三個(gè)字符是C。
因此我們可以使用位置的方式取出字符串中特定位置的字符,按照位置取字符串的方式使用中括號(hào)[]訪問(wèn),這個(gè)時(shí)候可以把字符串看作是一個(gè)列表(一種新的數(shù)據(jù)類型,在后面會(huì)繼續(xù)學(xué)習(xí)),不過(guò)需要注意的是,在程序的世界中,計(jì)數(shù)是從0開(kāi)始的,使用0來(lái)表示第一個(gè)。
s = 'ABC' a = s[0] # 第一個(gè) b = s[1] # 第二個(gè) c = s[2] # 第三個(gè) print(a) # ==> A print(b) # ==> B print(c) # ==> C
有時(shí)候,我們會(huì)想獲取字符串的一部分(子串),這個(gè)時(shí)候我們采取切片的方式獲取,切片需要在中括號(hào)[]中填入兩個(gè)數(shù)字,中間用冒號(hào)分開(kāi),表示子串的開(kāi)始位置和結(jié)束位置,并且這是半閉半開(kāi)區(qū)間,不包括最后的位置。
ab = s[0:2] # 取字符串s中的第一個(gè)字符到第三個(gè)字符,不包括第三個(gè)字符 print(ab) # ==> AB
我們定義一個(gè)更長(zhǎng)的字符串,了解切片更多的細(xì)節(jié)。
s = 'ABCDEFGHIJK' abcd = s[0:4] # 取字符串s中的第一個(gè)字符到第五個(gè)字符,不包括第五個(gè)字符 print(abcd) # ==> ABCD cdef = s[2:6] # 取字符串s中的第三個(gè)字符到第七個(gè)字符,不包括第七個(gè)字符 print(cdef) # ==> CDEF
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Python3 MySQL 數(shù)據(jù)庫(kù)連接的使用示例
本文我們?yōu)榇蠹医榻B Python3 使用 PyMySQL 連接數(shù)據(jù)庫(kù),并實(shí)現(xiàn)簡(jiǎn)單的增刪改查,需要的朋友可以參考下2021-06-06Python實(shí)現(xiàn)刪除當(dāng)前目錄下除當(dāng)前腳本以外的文件和文件夾實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)刪除當(dāng)前目錄下除當(dāng)前腳本以外的文件和文件夾的方法,涉及Python針對(duì)目錄及文件的刪除技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07python實(shí)現(xiàn)代碼行數(shù)統(tǒng)計(jì)示例分享
這篇文章主要介紹了python實(shí)現(xiàn)代碼行數(shù)統(tǒng)計(jì)的示例,需要的朋友可以參考下2014-02-02Python高級(jí)特性——詳解多維數(shù)組切片(Slice)
今天小編就為大家分享一篇Python高級(jí)特性——詳解多維數(shù)組切片(Slice),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11比較詳細(xì)Python正則表達(dá)式操作指南(re使用)
Python 1.5之前版本則是通過(guò) regex 模塊提供 Emecs 風(fēng)格的模式。Emacs 風(fēng)格模式可讀性稍差些,而且功能也不強(qiáng),因此編寫新代碼時(shí)盡量不要再使用 regex 模塊,當(dāng)然偶爾你還是可能在老代碼里發(fā)現(xiàn)其蹤影2008-09-09Python爬蟲(chóng)庫(kù)urllib的使用教程詳解
Python?給人的印象是抓取網(wǎng)頁(yè)非常方便,提供這種生產(chǎn)力的,主要依靠的就是?urllib、requests這兩個(gè)模塊。本文主要給大家介紹一下urllib的使用,感興趣的可以了解一下2022-11-11