Python中的數(shù)值類型

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ī)則如下:

  1. 0或None或空字符(串)轉(zhuǎn)換成False
  2. 非0值慨默、非None或非空字符(串)轉(zhuǎn)換成True

布爾類型有時(shí)會(huì)轉(zhuǎn)換成整型使用贩耐,其轉(zhuǎn)換規(guī)則很簡單:

  1. True轉(zhuǎn)換成1
  2. 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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掀序,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子惭婿,更是在濱河造成了極大的恐慌不恭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件财饥,死亡現(xiàn)場離奇詭異换吧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)钥星,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門沾瓦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谦炒,你說我怎么就攤上這事贯莺。” “怎么了宁改?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵缕探,是天一觀的道長。 經(jīng)常有香客問我还蹲,道長爹耗,這世上最難降的妖魔是什么耙考? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮潭兽,結(jié)果婚禮上倦始,老公的妹妹穿的比我還像新娘。我一直安慰自己讼溺,他們只是感情好楣号,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怒坯,像睡著了一般炫狱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剔猿,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天视译,我揣著相機(jī)與錄音,去河邊找鬼归敬。 笑死酷含,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汪茧。 我是一名探鬼主播椅亚,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舱污!你這毒婦竟也來了呀舔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤扩灯,失蹤者是張志新(化名)和其女友劉穎媚赖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體珠插,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惧磺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捻撑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磨隘。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖顾患,靈堂內(nèi)的尸體忽然破棺而出琳拭,到底是詐尸還是另有隱情,我是刑警寧澤描验,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站坑鱼,受9級(jí)特大地震影響膘流,放射性物質(zhì)發(fā)生泄漏絮缅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一呼股、第九天 我趴在偏房一處隱蔽的房頂上張望耕魄。 院中可真熱鬧,春花似錦彭谁、人聲如沸吸奴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽则奥。三九已至,卻和暖如春狭园,著一層夾襖步出監(jiān)牢的瞬間读处,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國打工唱矛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罚舱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓绎谦,卻偏偏與公主長得像管闷,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窃肠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 網(wǎng)站亂碼問題我們會(huì)經(jīng)常碰到包个,大多見于非英文的中文字符或其他字符亂碼,而且铭拧,這類問題常常是因?yàn)榫幋a方式問題赃蛛,主要原因...
    波段頂?shù)?/span>閱讀 2,835評(píng)論 1 9
  • 1、標(biāo)識(shí)符 什么事標(biāo)識(shí)符呢搀菩?變量的名字就是標(biāo)識(shí)符呕臂。不僅限于變量名,程序中各種元素的名字肪跋,都屬于標(biāo)識(shí)符歧蒋。例如符號(hào)常量...
    滕王閣序閱讀 906評(píng)論 0 0
  • 1.凡是在自己制定的計(jì)劃中,沒有人出現(xiàn)或是沒有跟人呆在一起州既,那么這個(gè)計(jì)劃99%堅(jiān)持不下來或根本進(jìn)行不了谜洽! 2.當(dāng)下...
    弘毅浪跡天涯閱讀 116評(píng)論 0 0
  • 走到空無一人的街上我抬頭望 白色路燈好像淺淺淡淡的月亮 每一次都在的你 從來不責(zé)怪的你 在哪顆星 是哪顆星 在被電...
    澄域閱讀 351評(píng)論 0 0
  • A:我覺得時(shí)間過得很快,轉(zhuǎn)眼的功夫我都不知道時(shí)間過得如此之快吴叶,我要找到自己的時(shí)間黑洞阐虚。 看看上面的時(shí)間安排自己突然...
    yeezhi306889閱讀 223評(píng)論 1 1