Python中的基本數(shù)據(jù)類型有數(shù)值類型婚瓜、字符串型、列表刑棵、元組巴刻、字典、集合等蛉签。本章介紹數(shù)值類型胡陪。數(shù)值類型包括整型沥寥、布爾型、浮點(diǎn)型和復(fù)數(shù)類型柠座。
3.1 整型
3.1.1 取值范圍
和其他語言一樣邑雅,Python中也有整型數(shù)據(jù)類型,與很多語言不同的是愚隧,Python的最新版本中( Python 3.6.1)的整型可表示的數(shù)值范圍非常大蒂阱,其大小只受計(jì)算機(jī)內(nèi)存大小的限制锻全。例如狂塘,下面這個(gè)非常大的整數(shù)的整型運(yùn)算,假如在C語言中鳄厌,需要自行構(gòu)造數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)荞胡,而在Python 3.6.1中,使用語言內(nèi)置的整型即可實(shí)現(xiàn)了嚎,而且其算法經(jīng)過了優(yōu)化泪漂,計(jì)算速度相當(dāng)快:
>>>> 1111**1000 # 1111的1000次方
>>>> 51767708443443359586930107440187874650172620553914244948309038572762729578198094152582315911797136186237712453.....
3.1.2 支持的運(yùn)算
我們前面講過,當(dāng)我們談?wù)撃硞€(gè)數(shù)據(jù)類型時(shí)歪泳,一方面規(guī)定了該數(shù)據(jù)類型的取值及其范圍萝勤,另一方面規(guī)定了在該數(shù)據(jù)類型上可以執(zhí)行的運(yùn)算。對(duì)于整型呐伞,可以進(jìn)行算術(shù)運(yùn)算敌卓、位運(yùn)算和比較運(yùn)算。
1. 算術(shù)運(yùn)算
整型和浮點(diǎn)型都支持下面幾種算術(shù)運(yùn)算:
運(yùn)算 | 結(jié)果 | 注釋 |
---|---|---|
x+y | x和y的和(sum of x and y) | |
x-y | x和y的差(difference of x and y) | |
x*y | x和y的積(product of x and y) | |
x/y | x和y的商(quotient of x and y) | (4) |
x//y | x和y的地板商(floor quotient of x and y) | (1) |
x%y | x/y的余數(shù)( remainder of x/y) | |
-x | 對(duì)x取負(fù)數(shù)(x negated) | |
+x | x本身(x unchanged) | |
abs(x) | x的絕對(duì)值或稱其大小(absolute value or magnitude of x) | |
int(x) | 將x轉(zhuǎn)換為整型 | (3) |
divmod(x,y) | 由(x//y, x%y)組成的數(shù)值對(duì) | |
pow(x,y) | x的y次方 | (2) |
x**y | x的y次方 | (2) |
(1) 也稱為整數(shù)除法伶氢,對(duì)運(yùn)算結(jié)果進(jìn)行了取整趟径,不過結(jié)果的類型不一定是整型(int),結(jié)果總是向負(fù)無窮方向取整: 1//2=0, (-1)//2=-1, 1//(-2)=-1癣防,而(-1)//(-2)=0蜗巧。
(2) 和其他編程語言一樣,Python定義pow(0,0)或0**0為1蕾盯。
(3) int()是一個(gè)類型轉(zhuǎn)換函數(shù)幕屹,把其他類型的值轉(zhuǎn)換成整型值。從浮點(diǎn)型轉(zhuǎn)換為整型將像C語言中那樣對(duì)浮點(diǎn)數(shù)進(jìn)行舍入(舍去浮點(diǎn)數(shù)中的任何小數(shù)级遭,而不是四舍五入)
(4) 也稱為小數(shù)除法望拖,結(jié)果是一個(gè)"精確的"小數(shù)
>>> i=5//3 # i=1
>>> i=5%3 # i=2
>>> i=abs(-1) # i=1
>>> i=int("1234") # i=1234
>>> pair=divmod(5,3) # pair=(1,2)
>>> i=power(2,3) # i=8
>>> i=2**3. # i=8
2. 位運(yùn)算
整型數(shù)支持位運(yùn)算,就是對(duì)整型數(shù)對(duì)應(yīng)的二進(jìn)制數(shù)進(jìn)行按位操作装畅。有以下幾種位運(yùn)算:
操作(運(yùn)算) | 結(jié)果 | 注釋 |
---|---|---|
x|y | x和y的按位或 | |
x^y | x和y的按位異或 | |
x&y | x和y的按位與 | |
x<<n | x左移n位 | (1)(2) |
x>>n | x右移n位 | (1)(3) |
~x | x按位取反 |
(1) n為負(fù)數(shù)時(shí)不合法靠娱,將會(huì)出錯(cuò)
(2) 左移n位等效于乘以pow(2, n)的積,不進(jìn)行溢出檢查
(3) 右移n位等效于除以pow(2,n)的商掠兄,不進(jìn)行溢出檢查
# 按位或運(yùn)算是對(duì)整數(shù)的對(duì)應(yīng)位進(jìn)行或運(yùn)算像云,得到的結(jié)果锌雀,
# 位或運(yùn)算遵循下面的表,參與計(jì)算的兩位中只要有1個(gè)是1迅诬,結(jié)果就是1
# 1st digit 1 1 0 0
# 2nd digit 1 0 1 0
# result digit 1 1 1 0
>>> i=10 # i的二進(jìn)制表示(4位即可腋逆,高位為0) 1010
>>> j=8 # j的二進(jìn)制表示(4位即可,高位為0) 1000
>>> k=i|j # k的二進(jìn)制表示(4位即可侈贷,高位為0) 1010惩歉,其十進(jìn)制是10
# 按位與運(yùn)算是對(duì)整數(shù)的對(duì)應(yīng)位進(jìn)行與運(yùn)算,得到的結(jié)果
# 位與運(yùn)算遵循下面的表俏蛮,參與計(jì)算的兩位中都是1撑蚌,結(jié)果才是1
# 1st digit 1 1 0 0
# 2nd digit 1 0 1 0
# result digit 1 0 0 0
>>> i=10 # i的二進(jìn)制表示(4位即可,高位為0) 1010
>>> j=8 # j的二進(jìn)制表示(4位即可搏屑,高位為0) 1000
>>> k=i&j # k的二進(jìn)制表示(4位即可争涌,高位為0) 1000,其十進(jìn)制是8
# 左移位運(yùn)算就是對(duì)將整型數(shù)的二進(jìn)制表示按位左移辣恋,
# 右側(cè)補(bǔ)0亮垫,相當(dāng)于乘以2**n
>>> i=10 # i的二進(jìn)制表示(16位即可,高位為0) 0000 0000 0000 1010
>>> j=i<<2 #j的二進(jìn)制表示. 0000 0000 0010 1000
>>> j
40
# 右移位運(yùn)算與左移位相反
>>> i = 10 # 0000 0000 0000 1010
>>> j=i>>2 # 0000 0000 0000 0010 , 十進(jìn)制為2
# 可以看到起整數(shù)除法的效果伟骨,即j=i//4
上面的代碼中介紹了正整數(shù)的右移位運(yùn)算饮潦,負(fù)整數(shù)的二進(jìn)制表示和右移位運(yùn)算該怎么做呢?這涉及到數(shù)字表示的原碼携狭、反碼和補(bǔ)碼继蜡。先透露一點(diǎn),計(jì)算機(jī)中常用補(bǔ)碼表示暑中,以解決正負(fù)數(shù)混合運(yùn)算的問題壹瘟。
為了簡化問題,我們用四位二進(jìn)制位表示一個(gè)整數(shù)鳄逾。
原碼: 一個(gè)整數(shù)的最基本的二進(jìn)制表示稻轨,在最高位用1表示負(fù)號(hào),最高位的0不表示正號(hào)雕凹,仍表示0殴俱。如: 十進(jìn)制數(shù)3的原碼是0011, -3的原碼是 1011
我們看到,使用原碼枚抵,對(duì)于正整數(shù)的相加线欲,能夠很好地解決了,但正負(fù)數(shù)相加就不對(duì)了汽摹。比如:
3 0 0 1 1 3 0 0 1 1 +3 0 0 1 1 +(-3) 1 0 1 1 ------------ ------------- 6 0 1 1 0 -6 1 1 1 0
因此李丰,引入了反碼
反碼: 正數(shù)的反碼就是其原碼,負(fù)數(shù)的反碼符號(hào)位不變逼泣,其余各位按位取反趴泌。十進(jìn)制數(shù)3的反碼是: 0011舟舒, -3的反碼是1100。0的反碼有兩個(gè)(±0)嗜憔,分別是0000和1111
3 0 0 1 1 3 1 1 0 0 +3 0 0 1 1 +(-3) 1 1 0 0 ------------- --------------- 6 0 1 1 0 0 1 1 1 1 0的反碼
反碼中0存在±0兩種表示秃励,這不美觀,因此吉捶,我們引入了補(bǔ)碼夺鲜,解決了上述問題:
補(bǔ)碼: 正數(shù)的補(bǔ)碼是其原碼,負(fù)數(shù)的補(bǔ)碼是反碼加1呐舔,十進(jìn)制數(shù)3的補(bǔ)碼是0011币励,十進(jìn)制數(shù)-3的補(bǔ)碼是1101。這時(shí)滋早,+0和-0的補(bǔ)碼就相同了榄审。
3 0 0 1 1 3 0 0 1 1 +3 0 0 1 1 +(-3) 1 1 0 1 ------------- --------------- 6 0 1 1 0 0 (1)0 0 0 0 (最高位的1由于超出4位而被丟棄)
負(fù)整數(shù)的右移位運(yùn)算,是將負(fù)整數(shù)的低位移出數(shù)字杆麸,在高位補(bǔ)符號(hào)位,即1
>>> i=-3 # 補(bǔ)碼是 1 1 0 1
>>> j=i>>2 # j的補(bǔ)碼 1 1 1 1
>>> j
-1
j的補(bǔ)碼是1111浪感,由它不能直觀地看出其十進(jìn)制值來昔头,需要將其轉(zhuǎn)換為原碼表示,求補(bǔ)碼的補(bǔ)碼影兽,即得到原碼揭斧,還記得補(bǔ)碼怎么求嗎: 先求反碼,再加上1就可以了峻堰,下面先求上面這個(gè)補(bǔ)碼的反碼:
補(bǔ)碼看做原碼 1 1 1 1 符號(hào)位是1讹开,表示一個(gè)負(fù)數(shù) 補(bǔ)碼的反碼 1 0 0 0 則反碼的符號(hào)位不變,其余位求反 補(bǔ)碼的補(bǔ)碼 1 0 0 1 這就是求出來的原碼捐名,還記得嗎 符號(hào)位的1表示符號(hào)旦万,最低位的1表示絕對(duì)值是1 這個(gè)原碼的十進(jìn)制表示是 -1
# 負(fù)數(shù)的按位求反運(yùn)算也很容易了
>>> i = -3 # 補(bǔ)碼是1 1 0 1
>>> j=~i. # 補(bǔ)碼是0 0 1 0 補(bǔ)碼的補(bǔ)碼是(1) 0 0 1 0丟棄最高位
# 十進(jìn)制值是2
題外話: C語言的帶符號(hào)整數(shù)和無符號(hào)整數(shù)
不像Python,在一些其他計(jì)算機(jī)語言中镶蹋, 內(nèi)置的整型類型的內(nèi)存表示是有長度限制的成艘,這個(gè)長度限制在制定語言標(biāo)準(zhǔn)時(shí),就規(guī)定好了贺归。例如淆两,C語言從創(chuàng)生起到現(xiàn)在為止,經(jīng)過了3個(gè)主要的國際標(biāo)準(zhǔn)階段拂酣,第一階段簡稱C89標(biāo)準(zhǔn)秋冰,在1989年完成標(biāo)準(zhǔn)化;第二個(gè)階段簡稱C99標(biāo)準(zhǔn)婶熬,在1999年完成標(biāo)準(zhǔn)化剑勾;第三個(gè)階段簡稱C11標(biāo)準(zhǔn)光坝,在2011年完成標(biāo)準(zhǔn)化。嚴(yán)格符合C語言標(biāo)準(zhǔn)的C語言實(shí)現(xiàn)(指C語言的編程環(huán)境和編譯器等)稱為標(biāo)準(zhǔn)C語言甥材。MS C(微軟的C實(shí)現(xiàn))和GCC(Linux的C實(shí)現(xiàn))是兩個(gè)主要的C語言實(shí)現(xiàn)盯另,它們除了支持標(biāo)準(zhǔn)C語言的功能之外,還對(duì)C語言實(shí)現(xiàn)了擴(kuò)展洲赵。當(dāng)編寫可移植的C程序時(shí)鸳惯,可移植程度越高,越應(yīng)當(dāng)增加使用符合標(biāo)準(zhǔn)C語言的代碼叠萍。所有C語言實(shí)現(xiàn)芝发,在編譯C程序時(shí),都提供開關(guān)選項(xiàng)苛谷,用以在編譯標(biāo)準(zhǔn)C語言程序辅鲸、支持的標(biāo)準(zhǔn)C版本以及擴(kuò)展C程序之間進(jìn)行選擇。隨著C標(biāo)準(zhǔn)的演進(jìn)腹殿,標(biāo)準(zhǔn)C語言支持越來越豐富的類型定義独悴、內(nèi)置功能和標(biāo)準(zhǔn)庫函數(shù)。
在C語言中锣尉,整型分為短整型刻炒、整型和長整型三種,每種整型又有帶符號(hào)和無符號(hào)兩種類型自沧,因此整型有short int坟奥、unsigned short int;int拇厢、 unsigned int爱谁;long int、unsigned long int六種類型孝偎,對(duì)于這6種整型访敌,C標(biāo)準(zhǔn)支持的最小取值范圍又是不同的。為什么說C標(biāo)準(zhǔn)支持的最小取值范圍呢? 因?yàn)镃標(biāo)準(zhǔn)規(guī)定了這6種整型的二進(jìn)制表示的最小位數(shù)邪媳,C實(shí)現(xiàn)可以對(duì)此進(jìn)行擴(kuò)展捐顷,但一般不超過C編程環(huán)境所在的設(shè)備硬件和操作系統(tǒng)所能支持的自然長度。比如在32位計(jì)算機(jī)和32位操作系統(tǒng)上雨效,int類型最大可用32位二進(jìn)制數(shù)表示迅涮。但C89規(guī)定,int類型的二進(jìn)制表示最小為16位徽龟,也就是說叮姑,從移植性角度來說,凡是符合C89的C語言編程環(huán)境都可安全地假設(shè)它支持16位int型整數(shù)。
所謂帶符號(hào)和無符號(hào)整型传透,其區(qū)別是帶符號(hào)整型的二進(jìn)制表示中可以帶一個(gè)符號(hào)位耘沼,用于表示負(fù)數(shù)符號(hào),因此帶符號(hào)整型可以表示正朱盐、負(fù)整數(shù)群嗤,多數(shù)計(jì)算設(shè)備中,帶符號(hào)整型的二進(jìn)制表示是用補(bǔ)碼表示的兵琳;而無符號(hào)整型則不帶符號(hào)位狂秘,它的所有二進(jìn)制位都用于表示數(shù)字本身,因此無符號(hào)整型只能表示正整數(shù)躯肌,它用原碼(對(duì)于正整數(shù)來說者春,反碼和補(bǔ)碼都是原碼)表示即可。
比如清女,對(duì)于用16位二進(jìn)制數(shù)表示的x86系列計(jì)算機(jī)中钱烟,某個(gè)用補(bǔ)碼表示int型的C實(shí)現(xiàn)下:
int的最大值為: 十進(jìn)制: 32767 二進(jìn)制: 0111 1111 1111 1111
int的最小值為: 絕對(duì)值 -32768
? 它的補(bǔ)碼的計(jì)算法:
? 首先,符號(hào)位置1
? 二進(jìn)制原碼 1000 0000 0000 0000 (符號(hào)位和最高位占用了同一位)嫡丙,注意: 1111 1111 1111 1111 是-32767
? 取反碼: 0111 1111 1111 1111
? 補(bǔ)碼=反碼+1: 1000 0000 0000 0000
那么拴袭,下面的代碼的結(jié)果是什么呢:
int i=32767; printf("%d\n", i+1)
從上面的討論中,我們知道: 32767的二進(jìn)制表示是0111 1111 1111 1111迄沫,由于計(jì)算機(jī)中的運(yùn)算都是以二進(jìn)制方式進(jìn)行的稻扬,對(duì)它加1,得到的二進(jìn)制表示是1000 0000 0000 0000羊瘩,我們看到,它變成了-32768的補(bǔ)碼形式盼砍,因此尘吗,上面的程序得到的結(jié)果是:
-32768
那么,下面這個(gè)程序的結(jié)果是什么呢?
int i=-32768; printf("%d\n", i-1);
你總結(jié)出規(guī)律來了嗎浇坐?
C99和C11只是對(duì)這些整型所規(guī)定的可接受的二進(jìn)制表示的最小長度有所不同睬捶,即這些整型的取值范圍有所不同,但原理是一樣的近刘。
對(duì)于用16位二進(jìn)制表示的unsigned int類型擒贸,其
最小值為 0, 二進(jìn)制為:0000 0000 0000 0000
最大值為65535, 二進(jìn)制為: 1111 1111 1111 1111
3. 比較運(yùn)算
運(yùn)算(操作) | 含義 |
---|---|
< |
小于 |
<= |
小于等于 |
> |
大于 |
>= |
大于等于 |
== |
相等 |
!= |
不等于 |
is |
是相同的對(duì)象(1) |
is not |
是不同的對(duì)象(1) |
(1)is和is not判斷兩個(gè)對(duì)象是否是同一個(gè)對(duì)象。對(duì)于值相同的整型對(duì)象觉渴,Python將不同變量名指向了同一個(gè)值(內(nèi)存塊)介劫,所以使用is/is not判斷分別相當(dāng)于==/!=判斷。
>>> i=3
>>> j=3
>>> i is j
True
>>> id(i) # i和j是同一個(gè)對(duì)象案淋,所以i is j == True
10914432
>>> id(j)
10914432
>>> j=4
>>> i is j
False
>>> id(j) # j和i不是同一個(gè)對(duì)象座韵,所以i is j == False
10917536
3.2 布爾類型
布爾類型是一種特殊的整型。
3.2.1 取值范圍
布爾類型只有True/False兩個(gè)值。
3.2.2 條件判斷
if 語句和while語句對(duì)條件進(jìn)行判斷誉碴,最簡單的條件判斷如下所示:
if True: print("True")
else: print("False")
while(True):
print("I am always True")
3.2.3 布爾表達(dá)式
在能夠使用布爾變量的地方宦棺,都可以使用布爾表達(dá)式代替,布爾表達(dá)式是對(duì)布爾值進(jìn)行布爾運(yùn)算得到的黔帕。常見的布爾運(yùn)算如下所示:
# 布爾或運(yùn)算
>>> cond1 or cond2 # or是運(yùn)算符代咸,cond1和cond2是布爾值
# 布爾與運(yùn)算
>>> cond1 and cond2 # and是運(yùn)算符,cond1和cond2是布爾值
# 布爾非運(yùn)算
>>> not cond # not是運(yùn)算符成黄,cond是布爾值
布爾運(yùn)算的結(jié)果由一個(gè)叫做真值表的東東決定:
布爾或運(yùn)算
cond1 | cond2 | 結(jié)果 |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
布爾與運(yùn)算
cond1 | cond2 | 結(jié)果 |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
布爾非運(yùn)算
cond | 結(jié)果 |
---|---|
True | False |
False | True |
3.2.3 類型轉(zhuǎn)換
在條件判斷和布爾表達(dá)式中出現(xiàn)其他類型時(shí)呐芥,會(huì)將其他類型轉(zhuǎn)換成布爾類型使用。其他類型的值向布爾類型的常用轉(zhuǎn)換規(guī)則如下:
- 0或None或空字符(串)轉(zhuǎn)換成False
- 非0值慨默、非None或非空字符(串)轉(zhuǎn)換成True
布爾類型有時(shí)會(huì)轉(zhuǎn)換成整型使用贩耐,其轉(zhuǎn)換規(guī)則很簡單:
- True轉(zhuǎn)換成1
- False轉(zhuǎn)換成0
>>> bool(1)
True
>>> bool(0)
False
>>> bool(None)
False
>>> bool("")
False
>>> bool(1.2)
True
>>> bool(-0.1)
True
>>> bool(0.0)
False
>>> bool("abc")
True
>>> int(True)
1
>>> int(False)
0
下面是字符串類型向布爾類型轉(zhuǎn)換的一個(gè)例子:
>>>def checkCond(cond):
... if cond : print("good luck")
... else: print("bad luck")
>>> cond="something"
>>> checkCond(cond)
good luck
>>> cond=""
>>> checkCond(cond)
bad luck
3.3 浮點(diǎn)類型
3.3.1 取值范圍
計(jì)算機(jī)語言中,使用浮點(diǎn)類型近似表示實(shí)數(shù)厦取。之所以說是近似表示潮太,是因?yàn)橛捎谠趦?nèi)部使用二進(jìn)制表示我們常用的十進(jìn)制數(shù),常常存在一些精度的損失虾攻。其原因是什么呢? 我們先回顧一下正整數(shù)的二進(jìn)制原碼表示铡买,如: 十進(jìn)制的7,可表示為二進(jìn)制的111霎箍,其轉(zhuǎn)換式如下所示:
7十進(jìn)制 = 1x22+1x21+1x20=4+2+1
那么奇钞,二進(jìn)制實(shí)數(shù): 111.11表示什么呢, 很簡單,它表示:
1x22+1x21+1x20+1x2-1+1x2-2=4+2+1+0.5+0.25=7.75
可見漂坏,二進(jìn)制數(shù)111.11可以精確的表示十進(jìn)制實(shí)數(shù)7.75
但是景埃,十進(jìn)制數(shù)0.3能用二進(jìn)制精確地表示嗎,我們看一下:
2-1=0.5
2-2=0.25
2-3=0.125
2-4 = 0.0625
2-5 =0.03125
2-6=0.015625
我們看到顶别,如果把用二進(jìn)制小數(shù)表示十進(jìn)制小數(shù)看成一個(gè)拼圖游戲谷徙,要表示的十進(jìn)制數(shù)看成最終的結(jié)果,用于拼湊這個(gè)結(jié)果的小積木塊就是2-n(n=1, 2, ...)驯绎,其中最大的小積木塊的值是1/2完慧,然后依次是1/4,1/8剩失,1/16屈尼,每一級(jí)積木塊的體積都是上一級(jí)的二分之一,由于計(jì)算機(jī)中浮點(diǎn)數(shù)的表示是有長度限制的拴孤,這些小積木塊的數(shù)量是有限的脾歧,且由于存在小積木塊之間特殊的體積關(guān)系,所以使用二進(jìn)制數(shù)并不能精確地表示全部的十進(jìn)制數(shù)乞巧,除非這些小積木塊能夠恰好拼在一起(如下面的0.3125就是兩個(gè)可以恰好拼在一起的小積木塊)涨椒。譬如,十進(jìn)制數(shù)0.3可以使用二進(jìn)制數(shù)0.0101近似的表示,其表示的精確的十進(jìn)制數(shù)是
0.25+0.0625=0.3125
你也可以用更小的積木塊更近似的表示其中的0.0625蚕冬,達(dá)到更近似表示0.3的目的免猾,但是你始終無法準(zhǔn)確地表示它。對(duì)比整數(shù)的表示囤热,在整數(shù)中猎提,最小的積木塊是0或1,所以只要內(nèi)存足夠大旁蔼,Python可以精確表示足夠大的整數(shù)锨苏。
內(nèi)置的浮點(diǎn)型數(shù)據(jù)不能精確地表示全部十進(jìn)制數(shù),是目前的計(jì)算機(jī)編程語言普遍存在的一個(gè)局限棺聊。但對(duì)于要完成的大多數(shù)任務(wù)伞租,內(nèi)置的精度是足夠的。對(duì)于C語言和C++語言限佩,內(nèi)置有float和double兩種浮點(diǎn)類型葵诈,分別稱為單精度和雙精度浮點(diǎn)類型,它們在計(jì)算機(jī)中所占的內(nèi)存單元大小和二進(jìn)制表示的結(jié)構(gòu)有所不同祟同,因此作喘,后者的精度是前者的兩倍,可表示的實(shí)數(shù)范圍也更大晕城。單精度浮點(diǎn)型的精度(有效小數(shù)位數(shù))為7位泞坦,比如一個(gè)單精度浮點(diǎn)數(shù)0.12345678901,7以后的數(shù)字就是不精確的了砖顷。
與C不一樣贰锁,Python 3.6中只有雙精度浮點(diǎn)數(shù),而沒有單精度浮點(diǎn)數(shù)滤蝠。
3.3.2 浮點(diǎn)數(shù)支持的運(yùn)算
1. 算術(shù)運(yùn)算
運(yùn)算 | 結(jié)果 | 注釋 |
---|---|---|
x+y | x和y的和(sum of x and y) | |
x-y | x和y的差(difference of x and y) | |
x*y | x和y的積(product of x and y) | |
x/y | x和y的商(quotient of x and y) | (4) |
x//y | x和y的地板商(floor quotient of x and y) | (1) |
x%y | x/y的余數(shù)( remainder of x/y) | |
-x | 對(duì)x取負(fù)數(shù)(x negated) | |
+x | x本身(x unchanged) | |
abs(x) | x的絕對(duì)值或稱其大小(absolute value or magnitude of x) | |
int(x) | 將x轉(zhuǎn)換為整型 | (3) |
divmod(x,y) | 由(x//y, x%y)組成的數(shù)值對(duì) | |
pow(x,y) | x的y次方 | (2) |
x**y | x的y次方 | (2) |
(1) 也稱為整數(shù)除法李根,對(duì)運(yùn)算結(jié)果進(jìn)行了取整,不過結(jié)果的類型不一定是整型(int)几睛,結(jié)果總是向負(fù)無窮方向取整: 1//2=0, (-1)//2=-1, 1//(-2)=-1,而(-1)//(-2)=0粤攒。
(2) 和其他編程語言一樣所森,Python定義pow(0,0)或0**0為1。
(3) int()是一個(gè)類型轉(zhuǎn)換函數(shù)夯接,把其他類型的值轉(zhuǎn)換成整型值焕济。從浮點(diǎn)型轉(zhuǎn)換為整型將像C語言中那樣對(duì)浮點(diǎn)數(shù)進(jìn)行舍入(舍去浮點(diǎn)數(shù)中的任何小數(shù),而不是四舍五入)
(4) 也稱為小數(shù)除法盔几,結(jié)果是一個(gè)"精確的"小數(shù)
浮點(diǎn)數(shù)還支持下面的算術(shù)運(yùn)算:
運(yùn)算 | 結(jié)果 |
---|---|
math.trunc(x) | 將x截?cái)酁檎蛿?shù) |
round(x[, n]) | x舍入為n位有效數(shù)字晴弃,四舍五入為偶數(shù)。假如省略了n,它默認(rèn)為0 |
math.floor(x) | 小于等于x的最大整數(shù) |
math.ceil(x) | 大于等于x的最小整數(shù) |
還有更多數(shù)值運(yùn)算上鞠,參見math和cmath模塊的說明际邻。
2. 比較運(yùn)算
運(yùn)算 | 含義 |
---|---|
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 等于 |
!= | 不等于 |
is | 是相同的對(duì)象 |
is not | 不是相同的對(duì)象 |
?: 上文講整型,與現(xiàn)在講浮點(diǎn)數(shù)時(shí)芍阎,談到它們受到支持的運(yùn)算是大部分相同的世曾,但它們并不是只支持整型之間或只支持浮點(diǎn)數(shù)之間的運(yùn)算,而是可以支持不同類型的數(shù)據(jù)之間的運(yùn)算的谴咸。這時(shí)轮听,涉及到類型轉(zhuǎn)換的問題,也就是岭佳,參與運(yùn)算的數(shù)據(jù)血巍,要從等級(jí)較低的類型轉(zhuǎn)換為等級(jí)較高的類型,如: 對(duì)于整型和浮點(diǎn)型的混合運(yùn)算珊随,整型數(shù)先要轉(zhuǎn)換成浮點(diǎn)數(shù)述寡,例子代碼如下:
# cal1.py i=3 f=4.2 r=i+f # 等價(jià)于 r=float(i)+f print(r)
運(yùn)行結(jié)果是
$ ./cal1.py $ 7.2
到目前為止我們學(xué)過的內(nèi)置數(shù)據(jù)類型: 布爾型、整型和浮點(diǎn)型玫恳,參與混合運(yùn)算時(shí)的等級(jí)從低到高依次是: 布爾型辨赐、整型、浮點(diǎn)型京办。舉個(gè)例子:
# cal2.py b=True i=3 f=4.2 r=b+i+f # 等價(jià)于r=float(b)+float(i)+f print(r)
結(jié)果是:
$ ./cal2.py $ 8.2