Python程序設(shè)計(jì)課件第2章 數(shù)據(jù)類型、運(yùn)算符及表達(dá)式_第1頁(yè)
Python程序設(shè)計(jì)課件第2章 數(shù)據(jù)類型、運(yùn)算符及表達(dá)式_第2頁(yè)
Python程序設(shè)計(jì)課件第2章 數(shù)據(jù)類型、運(yùn)算符及表達(dá)式_第3頁(yè)
Python程序設(shè)計(jì)課件第2章 數(shù)據(jù)類型、運(yùn)算符及表達(dá)式_第4頁(yè)
Python程序設(shè)計(jì)課件第2章 數(shù)據(jù)類型、運(yùn)算符及表達(dá)式_第5頁(yè)
已閱讀5頁(yè),還剩76頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2.1數(shù)據(jù)類型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式of311在程序中使用的變量名、函數(shù)名,常量名等統(tǒng)稱為標(biāo)識(shí)符,在Python里,標(biāo)識(shí)符由字母、數(shù)字、下劃線組成。但不能以數(shù)字開(kāi)頭。另外Python中的標(biāo)識(shí)符是區(qū)分大小寫(xiě)的。關(guān)于Python標(biāo)識(shí)符有如下幾點(diǎn)說(shuō)明:(1)以下劃線開(kāi)頭的標(biāo)識(shí)符是有特殊意義的。(2)以單下劃線開(kāi)頭的標(biāo)識(shí)符(_xxx)代表不能直接訪問(wèn)的類屬性,需通過(guò)類提供的接口進(jìn)行訪問(wèn),不能用“fromxxximport*”而導(dǎo)入。(3)以雙下劃線開(kāi)頭的標(biāo)識(shí)符(__xxx)代表類的私有成員。(4)以雙下劃線開(kāi)頭和結(jié)尾的標(biāo)識(shí)符(__xxx__)代表Python里特殊方法專用的標(biāo)識(shí),如__init__()代表類的構(gòu)造函數(shù)。2.1.1標(biāo)識(shí)符2.1數(shù)據(jù)類型of312(5)在對(duì)變量進(jìn)行命名時(shí)應(yīng)盡量避免使用上述樣式。除此之外,還有一些字符串是Python規(guī)定的具有特殊意義的,稱為保留字或關(guān)鍵字,用戶定義的標(biāo)識(shí)符不能與之相同。常見(jiàn)的保留字如下所示:False class finallyisreturnNonecontinuelambdaTrue def fromnonlocalwhileanddelglobalnot with…aselifif oryieldtryassertElseimportpassbreak exceptinraisefor下面是一部分保留字的含義。if:條件判斷語(yǔ)句。for:用于遍歷迭代器每個(gè)元素。try:與except,finally配合使用處理在程序運(yùn)行中出現(xiàn)的異常情況。2.1.1標(biāo)識(shí)符第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of313一、遵守國(guó)家法律制度二、遵守校規(guī)校紀(jì)三、遵守實(shí)驗(yàn)室管理規(guī)定、課堂紀(jì)律1、不準(zhǔn)破壞性操作,不準(zhǔn)亂設(shè)口令和修改機(jī)內(nèi)配置參數(shù),不準(zhǔn)刪除系統(tǒng)文件,不準(zhǔn)修改機(jī)房操作系統(tǒng)、惡意傳播計(jì)算機(jī)病毒、安裝游戲軟件等與教學(xué)無(wú)關(guān)的行為;2、保持機(jī)房安靜,不準(zhǔn)大聲喧嘩和打鬧。3、嚴(yán)禁在機(jī)房?jī)?nèi)抽煙、吃喝及亂扔廢棄雜物。4、嚴(yán)禁瀏覽不健康及非法網(wǎng)站,嚴(yán)禁玩電子游戲。5、嚴(yán)禁傳播、下載不健康或非法內(nèi)容。6、嚴(yán)禁從事干擾、破壞他人上機(jī)的行為。7、使用完畢后關(guān)機(jī)、放好凳子、收好鍵盤(pán)抽,帶走自己產(chǎn)生的垃圾從標(biāo)志符命名規(guī)則到規(guī)則意識(shí),無(wú)規(guī)矩不成方圓,工作、生活和學(xué)習(xí),要按規(guī)矩辦事,在團(tuán)隊(duì)中各盡其責(zé),才會(huì)高效地完成任務(wù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of314cass:用于定義類型。def:用于定義函數(shù)和類型的方法。pass:表示此行為空,不運(yùn)行任何操作。assert:用于程序調(diào)試階段時(shí)測(cè)試運(yùn)行條件是否滿足。yield:在迭代器函數(shù)內(nèi)使用,用于返回一個(gè)元素。自從Python2.5版本以后。這個(gè)語(yǔ)句變成一個(gè)運(yùn)算符。raise:制造一個(gè)錯(cuò)誤。import:導(dǎo)入一個(gè)模塊或包。from:從包導(dǎo)入模塊或從模塊導(dǎo)入某個(gè)對(duì)象,與import配合使用。as:將導(dǎo)入的對(duì)象賦值給一個(gè)變量。in:判斷一個(gè)對(duì)象是否在一個(gè)字符串/列表/元組里。這些保留字中,除了False、None和True外,其余保留字都不能作為一個(gè)值賦給變量,在Python3.X中,所有的保留字都不能被賦值。2.1.1標(biāo)識(shí)符第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of315需要注意的是,保留字并不是一成不變的,隨著Python版本的變遷,有些字符串會(huì)加入到保留字中。除了關(guān)鍵字外,還有轉(zhuǎn)義字符串,轉(zhuǎn)義字符串就是在一些字符或字符串前加“\”,用來(lái)表示一些無(wú)法顯示的字符,比如換行符。表2.1是一些轉(zhuǎn)義字符串。2.1.1標(biāo)識(shí)符表2.1常用的轉(zhuǎn)義字符及其含義第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3162.1.1標(biāo)識(shí)符表2.1常用的轉(zhuǎn)義字符及其含義(接上表)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of317在程序執(zhí)行過(guò)程中,其值不發(fā)生改變的量稱為常量。常量分為直接常量和符號(hào)常量。直接常量(字面常量)包括以下幾種:(1)整型常量:12、0、-3;(2)實(shí)型常量:4.6、-1.23;(3)字符常量:‘a(chǎn)’、‘b’。符號(hào)常量是指用標(biāo)識(shí)符代表一個(gè)常量。需要注意的是,Python沒(méi)有真正意義上的符號(hào)常量。但是有時(shí)候會(huì)需要用到符號(hào)常量。一般是在import語(yǔ)句下面用大寫(xiě)字母作為常量名,如:NUMBER=100。但這并不意味著這個(gè)值不可以被改變。2.1.2變量和常量第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of318習(xí)慣上符號(hào)常量的標(biāo)識(shí)符用大寫(xiě)字母,變量標(biāo)識(shí)符用小寫(xiě)字母,以示區(qū)別。使用符號(hào)常量的好處是能做到“一改全改”。即如果該常量被使用了很多次也只需在最開(kāi)始的地方改變其初值即可。值可以改變的量稱為變量。一個(gè)變量應(yīng)該有一個(gè)名字,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元。在Python中,對(duì)一個(gè)變量賦值之前并不需要對(duì)其定義或聲明,它會(huì)在第一次賦值時(shí)自動(dòng)生成。在使用一個(gè)變量之前需要先對(duì)其進(jìn)行賦值。變量命名規(guī)則如下:(1)變量名必須以字母或下劃線開(kāi)頭,后面可以跟任意數(shù)量的字母、下劃線和數(shù)字。變量名中只能有字母、下劃線和數(shù)字;(2)區(qū)分大小寫(xiě),如Python和python是不同的;(3)變量名不能使用保留字。2.1.2變量和常量第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of319下面的例子是將“helloworld”這個(gè)字符串賦給了變量a,然后再將a打印出來(lái)。>>>a='helloworld'>>>print(a)helloworld >>>當(dāng)一個(gè)變量不再使用的時(shí)候,可以使用del命令將其刪除。刪除之后要想使用該變量名需要重新賦值,如下:>>>a='abc'>>>print(a)abc>>>dela2.1.2變量和常量第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3110變量只是對(duì)象的引用值。在Python中對(duì)象有類型但變量沒(méi)有類型,也就是說(shuō),不需要為一個(gè)變量聲明類型而可以直接賦值創(chuàng)建各種類型的對(duì)象變量,也可以將不同的對(duì)象賦給同一個(gè)變量。>>>a='thisisastring'>>>print(a)thisisastring>>>a=123456>>>print(a)123456>>>a=['a','b','c','d']>>>print(a)['a','b','c','d']>>>2.1.2變量和常量第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3111對(duì)象是Python最基本的概念之一,Python中的一切都是對(duì)象。Python也提供了一些內(nèi)置對(duì)象,常見(jiàn)的Python內(nèi)置對(duì)象如表2.2所示。除此之外,還有大量的標(biāo)準(zhǔn)庫(kù)和擴(kuò)展庫(kù)對(duì)象,標(biāo)準(zhǔn)庫(kù)是Python默認(rèn)安裝的,但需要導(dǎo)入之后才能使用其中的對(duì)象(如何導(dǎo)入庫(kù)會(huì)在后面詳細(xì)講到),擴(kuò)展庫(kù)則不是默認(rèn)安裝的,需要先安裝在導(dǎo)入才能使用其中的對(duì)象,當(dāng)然也可以選擇自定義對(duì)象,這會(huì)在后面的章節(jié)講到。Python具有自動(dòng)內(nèi)存管理功能,對(duì)于沒(méi)有任何變量指向的值,Python會(huì)自動(dòng)將其刪除。Python會(huì)跟蹤所有的值,對(duì)沒(méi)有變量的值進(jìn)行刪除。2.1.2變量和常量第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of31122.1.2變量和常量表2.2Python內(nèi)置對(duì)象對(duì)象類型示例簡(jiǎn)要說(shuō)明數(shù)字1,1.2,1.1e4數(shù)字的長(zhǎng)度無(wú)限制字符串“abc”,’a’,’123’一般使用單引號(hào)和雙引號(hào)作為界定符,三引號(hào)一般做多行注釋使用列表[1,2,3],[‘1’,’2’,’3’]元素存放在一組方括號(hào)中,用逗號(hào)隔開(kāi)字典{name:Jack,age:20}元素存放在一組大括號(hào)中,元素為“鍵:值”形式元組(2,1,3)元素放在小括號(hào)中,且元組中的元素值不可更改文件f=open(‘file_name.txt’,’r’)open是Python內(nèi)置函數(shù),用來(lái)以指定模式打開(kāi)文件集合{1,2,3}元素放在大括號(hào)中,且元素不可重復(fù)布爾型True,False

空類型None

編程單元函數(shù)和類在Python中,函數(shù)和類都屬于可調(diào)用對(duì)象第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3113整型就是整常數(shù)。在Python3.X版本中,一般整數(shù)和長(zhǎng)整數(shù)類型已經(jīng)合二為一了。所以,現(xiàn)在Python里的整型精度是無(wú)限的,如下:>>>2**1001267650600228229401496703205376>>>Python不僅支持十進(jìn)制整型,也支持十六進(jìn)制、八進(jìn)制以及二進(jìn)制的整型。十六進(jìn)制的數(shù)以0x或者0X開(kāi)頭,后面跟一個(gè)16進(jìn)制的數(shù),由0~9以及a~f組成。分別代表0~15。其中,a~f不區(qū)分大小寫(xiě)。八進(jìn)制的數(shù)以0o或者0O(數(shù)字0加字母o或O)開(kāi)頭,后面跟一個(gè)八進(jìn)制的數(shù),由0~7組成。二進(jìn)制的數(shù)以0b或者0B開(kāi)頭,后面跟一個(gè)二進(jìn)制的數(shù),由0、1組成。2.1.3整型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3114春秋戰(zhàn)國(guó)時(shí)期,我國(guó)古人就已經(jīng)熟練地使用十進(jìn)位制的算籌記數(shù)法,比世界上第二個(gè)發(fā)明十進(jìn)制的國(guó)家古代印度起碼早約1000年,提高學(xué)生的民族自豪感和自信心,同學(xué)們要進(jìn)一步思考在新時(shí)代如何延續(xù)古圣先賢的智慧再創(chuàng)輝煌,實(shí)現(xiàn)偉大復(fù)興的中國(guó)夢(mèng)。1996年“阿麗亞納-5”運(yùn)載火箭將64位格式轉(zhuǎn)化為16位格式導(dǎo)致內(nèi)存溢出而引起火箭發(fā)射后爆炸的重大事故;被除數(shù)為0的千年蟲(chóng)問(wèn)題等。同學(xué)們?cè)谝蕾嚳茖W(xué)技術(shù)的同時(shí),更應(yīng)該保持一絲不茍、嚴(yán)謹(jǐn)認(rèn)真的學(xué)習(xí)和工作態(tài)度。2.1.3整型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3115二進(jìn)位制思想起源。源于《周易》中的八卦法,早于第二發(fā)明者德國(guó)數(shù)學(xué)家萊布尼茲(公元1646—1716)2000多年。負(fù)數(shù)的發(fā)現(xiàn)。這個(gè)發(fā)現(xiàn)最早見(jiàn)于《九章算術(shù)》,這一發(fā)現(xiàn)早于印度600多年,早于西方1600多年。早在兩千多年前,我國(guó)就有了正負(fù)數(shù)的概念,掌握了正負(fù)數(shù)的運(yùn)算法則。2.1.3整型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3116Python提供了內(nèi)置函數(shù)hex(a)、oct(a)、bin(a),可以將一個(gè)十進(jìn)制數(shù)a分別轉(zhuǎn)換成十六進(jìn)制、八進(jìn)制及二進(jìn)制的字符串,如下:>>>a=100>>>hex(a)'0x64'>>>oct(a)'0o144'>>>bin(a)'0b1100100'>>>2.1.3整型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3117此外int(string,b)函數(shù)可以將一個(gè)字符串按照給定的進(jìn)制轉(zhuǎn)換成數(shù)字,如下:>>>string='100'>>>print(int(string,2))4>>>print(int(string,8))64>>>print(int(string,10))100>>>print(int(string,16))2562.1.3整型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3118浮點(diǎn)數(shù)即帶有小數(shù)部分的數(shù)字。在Python里,浮點(diǎn)數(shù)分為兩類,一種是普通的由數(shù)字和小數(shù)點(diǎn)組成的,如1.0、2.3等。還有這是由科學(xué)計(jì)數(shù)法表示的浮點(diǎn)數(shù)。由數(shù)字,小數(shù)點(diǎn)以及科學(xué)計(jì)數(shù)標(biāo)志e或E組成,如:2.1e10這表示2.1ⅹ1010。需要注意的是,雖然2.1e10的結(jié)果是一個(gè)整數(shù),但2.1e10屬于浮點(diǎn)數(shù),2e10也同樣屬于浮點(diǎn)數(shù),如下:>>>type(2e5)<class'float'>>>>注:type函數(shù)可以顯示當(dāng)前對(duì)象的數(shù)據(jù)類型。2.1.4浮點(diǎn)型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3119有一種特殊的浮點(diǎn)數(shù)是小數(shù)對(duì)象,與普通浮點(diǎn)數(shù)相比,小數(shù)對(duì)象有固定的位數(shù)和小數(shù)點(diǎn),也就是說(shuō),小數(shù)是有固定精度的浮點(diǎn)數(shù)。小數(shù)對(duì)象與其他數(shù)據(jù)類型不同,小數(shù)對(duì)象需要導(dǎo)入一個(gè)decimal模塊后調(diào)用函數(shù)才能創(chuàng)建。#創(chuàng)建小數(shù)對(duì)象>>>fromdecimalimportDecimal>>>a=Decimal('0.1')>>>print(a)0.1>>>type(a)<class'decimal.Decimal'>需要注意的是,小數(shù)對(duì)象只能與小數(shù)對(duì)象和整數(shù)進(jìn)行運(yùn)算,如果和普通浮點(diǎn)數(shù)進(jìn)行運(yùn)算的話會(huì)出現(xiàn)語(yǔ)法報(bào)錯(cuò)。2.1.4浮點(diǎn)型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3120>>>fromdecimalimportDecimal>>>a=Decimal('0.10')>>>b=Decimal('0.20')>>>print(a/b)0.5>>>c=0.2>>>print(a/c)Traceback(mostrecentcalllast):File"<pyshell#154>",line1,in<module>print(a/c)TypeError:unsupportedoperandtype(s)for/:'decimal.Decimal'and'float'2.1.4浮點(diǎn)型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3121還可以通過(guò)這個(gè)模塊來(lái)設(shè)置全局精度,如下:>>>fromdecimalimportDecimal>>>fromdecimalimportgetcontext>>>getcontext().prec=4#設(shè)置精度>>>print(1/3)0.3333333333333333>>>a=Decimal('0.1')>>>b=Decimal('0.3')>>>print(a/b)0.3333>>>但該方法只對(duì)小數(shù)對(duì)象有用,而且如果小數(shù)部分的精度不夠,也不會(huì)補(bǔ)0。2.1.4浮點(diǎn)型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3122下面的例子只是設(shè)置精度:>>>fromdecimalimportDecimal>>>fromdecimalimportgetcontext>>>getcontext().prec=4#設(shè)置全局精度>>>a=decimal.Decimal('0.1')>>>b=decimal.Decimal('0.3')>>>print(a/b)0.3333>>>withdecimal.localcontext()aslocal:#設(shè)置局部精度

local.prec=1 print(a/b)0.3關(guān)于with…as…語(yǔ)句,后面會(huì)做介紹。2.1.4浮點(diǎn)型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3123下面的例子只是設(shè)置精度:>>>fromdecimalimportDecimal>>>fromdecimalimportgetcontext>>>getcontext().prec=4#設(shè)置全局精度>>>a=decimal.Decimal('0.1')>>>b=decimal.Decimal('0.3')>>>print(a/b)0.3333>>>withdecimal.localcontext()aslocal:#設(shè)置局部精度

local.prec=1 print(a/b)0.3關(guān)于with…as…語(yǔ)句,后面會(huì)做介紹。2.1.4浮點(diǎn)型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3124由于用來(lái)存儲(chǔ)數(shù)值的空間有限,浮點(diǎn)數(shù)缺乏精確性。例如,以下語(yǔ)句的計(jì)算結(jié)果應(yīng)該得到0,但結(jié)果卻不是0。雖然很接近0,但沒(méi)有足夠的位數(shù)去實(shí)現(xiàn)這樣的精度。>>>print(0.1+0.1+0.1+0.1-0.3-0.1)2.7755575615628914e-17>>>不過(guò)使用小數(shù)對(duì)象就可以改正了。用戶可以通過(guò)decimal模塊中的Decimal構(gòu)造函數(shù)創(chuàng)建一個(gè)小數(shù)對(duì)象,傳人的字符串就是小數(shù)。當(dāng)不同精度的小數(shù)對(duì)象在表達(dá)式中混用時(shí),Python會(huì)自動(dòng)升級(jí)成位數(shù)最多的小數(shù)。2.1.4浮點(diǎn)型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3125如果想將一個(gè)浮點(diǎn)數(shù)按照四舍五入的方法保留位數(shù)的話,還可以使用round()函數(shù)。round()函數(shù)很簡(jiǎn)單,就是對(duì)浮點(diǎn)數(shù)進(jìn)行近似取值,保留一定位數(shù)的小數(shù)。>>>a=0.334>>>b=0.335>>>print(round(a,2))0.33>>>print(round(b,2))0.34但因?yàn)樵跈C(jī)器中浮點(diǎn)數(shù)不一定能精確表達(dá),所以round函數(shù)可能會(huì)出錯(cuò),如下:>>>print(round(2.675,2))2.67>>>2.1.4浮點(diǎn)型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3126可以看到,結(jié)果應(yīng)該為2.68但實(shí)際是2.67,這并不是一個(gè)bug。在機(jī)器中浮點(diǎn)數(shù)不一定能精確表達(dá),因?yàn)閾Q算成一串1和0后可能是無(wú)限位的,機(jī)器已經(jīng)做出了截?cái)嗵幚怼D敲丛跈C(jī)器中保存的2.675這個(gè)數(shù)字就比實(shí)際數(shù)字要小那么一點(diǎn)點(diǎn)。這一點(diǎn)點(diǎn)就導(dǎo)致了它離2.67要更近一點(diǎn)點(diǎn),所以保留兩位小數(shù)時(shí)就近似到了2.67。所以如果對(duì)精確度要求很高的話,應(yīng)該盡量避開(kāi)使用round()函數(shù),而使用decimal模塊。2.1.4浮點(diǎn)型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3127浮點(diǎn)運(yùn)算速度是指計(jì)算機(jī)系統(tǒng)每秒可以處理的浮點(diǎn)操作,通常用FLOPS來(lái)表示。世界排名前四的中國(guó)神威.太湖之光安裝了40960個(gè)中國(guó)自主研發(fā)的“申威26010”眾核處理器,它采用64位自主申威指令系統(tǒng)和大規(guī)模并行處理體系結(jié)構(gòu),峰值性能為12.5億億次/秒,持續(xù)性能為9.3億億次/秒;世界排名前四的中國(guó)的“天河二號(hào)”峰值性能為5.49億億次/秒,持續(xù)性能為3.39億億次/秒,采用了自創(chuàng)的新型異構(gòu)多態(tài)體系結(jié)構(gòu)。我國(guó)運(yùn)用小數(shù)的時(shí)間,早于西方1100多年。超級(jí)計(jì)算機(jī)被稱為‘國(guó)家重器’,屬于國(guó)家戰(zhàn)略高技術(shù)領(lǐng)域,是世界各國(guó)競(jìng)相角逐的科技最高點(diǎn)。2.1.4浮點(diǎn)型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3128Python3.0引入了分?jǐn)?shù)這一數(shù)據(jù)類型。和小數(shù)對(duì)象相同,要?jiǎng)?chuàng)建分?jǐn)?shù)對(duì)象,需要引入一個(gè)模塊Fraction,如下所示:>>>fromfractionsimportFraction>>>x=Fraction(1,3)>>>y=Fraction(1,2)>>>print(x)1/3>>>print(y)1/2>>>type(x)<class'fractions.Fraction'>>>>2.1.5分?jǐn)?shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式中國(guó)完整的分?jǐn)?shù)運(yùn)算法則出現(xiàn)在《九章算術(shù)》中,我國(guó)早于印度500多年。2.1數(shù)據(jù)類型of3129可以傳入兩個(gè)參數(shù)即分子和分母來(lái)創(chuàng)建分?jǐn)?shù),也可以使用下面的方法:>>>fromfractionsimportFraction>>>print(Fraction(0.5))1/2>>>可以通過(guò)from_float函數(shù)和float函數(shù)實(shí)現(xiàn)分?jǐn)?shù)和浮點(diǎn)數(shù)的轉(zhuǎn)換。>>>fromfractionsimportFraction>>>a=2.5>>>b=Fraction.from_float(2.5)>>>print(b)5/2>>>print(float(b))2.52.1.5分?jǐn)?shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3130盡管可以將浮點(diǎn)數(shù)轉(zhuǎn)換成為分?jǐn)?shù),但在某些情況下會(huì)造成精度損失。出現(xiàn)這種情況時(shí),可以通過(guò)限制最大分母值來(lái)得到結(jié)果。如下:>>>fromfractionsimportFraction>>>b=Fraction.from_float(0.3)>>>a=b.limit_denominator(10)>>>print(a)3/10>>>print(b)5404319552844595/18014398509481984>>>可以看到,實(shí)際上b的值并沒(méi)有改變。2.1.5分?jǐn)?shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3131值得注意的是,Python會(huì)自動(dòng)進(jìn)行約分,分子或分母中有負(fù)號(hào)時(shí),自動(dòng)約分會(huì)最終將負(fù)號(hào)歸于分子。>>>fromfractionsimportFraction>>>print(Fraction(0.5))1/2>>>print(Fraction(5/10))1/2>>>print(Fraction(5/-10))-1/2>>>2.1.5分?jǐn)?shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3132分?jǐn)?shù)可以和整數(shù)、浮點(diǎn)數(shù)、當(dāng)然還有分?jǐn)?shù)本身進(jìn)行二元運(yùn)算,兩個(gè)分?jǐn)?shù)相加得到分?jǐn)?shù),相關(guān)規(guī)則如下:(1)一個(gè)分?jǐn)?shù)加一個(gè)整數(shù)得到一個(gè)分?jǐn)?shù);(2)一個(gè)分?jǐn)?shù)加一個(gè)浮點(diǎn)數(shù)得到一個(gè)浮點(diǎn)數(shù)。其他二元運(yùn)算和加法相同。2.1.5分?jǐn)?shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3133此外,F(xiàn)raction對(duì)象有兩個(gè)屬性numerator和denominator,分別代表了分子和分母,如下:>>>fromfractionsimportFraction>>>a=Fraction(5/10)>>>print(a)1/2>>>print(a.numerator)1>>>print(a.denominator)2>>>2.1.5分?jǐn)?shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3134除了上面這些以外,fraction模塊提供了一個(gè)gcd函數(shù),可以迅速找到兩個(gè)數(shù)的最大公約數(shù)。>>>fromfractionsimportgcd>>>print(gcd(256,16))16>>>2.1.5分?jǐn)?shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3135在Python里,有一種特殊的數(shù)據(jù)類型叫布爾型(bool),該類型只有兩種取值:True和False,分別代表真和假。實(shí)際上,可以把True和False看成是Python內(nèi)置的變量名,值分別為1和0。因?yàn)閷?shí)際上True的值就是1,而False則為0,如圖2.1所示。2.1.6布爾型圖2.1布爾型的值在有了bool數(shù)據(jù)類型之后,可以用True或False更清楚、準(zhǔn)確地設(shè)置標(biāo)志位,例如flag=False,使標(biāo)志位的含義更加清晰;也可以用于條件語(yǔ)句,如無(wú)限循環(huán)語(yǔ)句whileTrue:。第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3136Python除了與大多數(shù)程序設(shè)計(jì)語(yǔ)言一樣,把整數(shù)0當(dāng)成False,整數(shù)1代表True,也把任意的非空數(shù)據(jù)結(jié)構(gòu)看作True,把任意的空數(shù)據(jù)結(jié)構(gòu)看作False。也就是說(shuō)Python的每個(gè)對(duì)象都有一個(gè)屬性代表該對(duì)象是True還是False。每個(gè)對(duì)象不是True就是False。數(shù)字非0即為T(mén)rue,其他對(duì)象非空即為T(mén)rue,如下:>>>bool(0)False>>>bool(10)True>>>list_a=[]>>>print(bool(list_a))False2.1.6布爾型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3137>>>str1=''>>>print(bool(str1))False>>>str1='123'>>>print(bool(str1))True>>>print(bool(None))False>>>這也表示了每個(gè)對(duì)象都可以作為循環(huán)結(jié)構(gòu)或選擇結(jié)構(gòu)的條件表達(dá)式,如if1:或while0:是合法的,這一部分會(huì)在后面談到。2.1.6布爾型第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型of3138Python里還有一個(gè)特殊的對(duì)象,即空值,該對(duì)象只有一個(gè)值用None表示,None并不等于0或其他一些空的數(shù)據(jù)類型。而是一個(gè)特殊的值。代表什么也沒(méi)有。另外None的布爾值為False。2.1.6空值第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出2.1數(shù)據(jù)類型2.3運(yùn)算符與表達(dá)式of5639第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3140print函數(shù)的作用就是將對(duì)象打印到屏幕上,有人也許會(huì)疑惑,在之前的例子中并沒(méi)有使用print,卻依然將對(duì)象的值打印到了屏幕上,這是因?yàn)橹岸际窃赑ython的交互式解釋器中進(jìn)行的。它會(huì)自動(dòng)打印表達(dá)式的值。在Python里,print可以打印任意類型的值,哪怕輸一個(gè)列表之類的復(fù)雜數(shù)據(jù)類型,也可以打印出來(lái),關(guān)于復(fù)雜數(shù)據(jù)類型會(huì)在后面講到。當(dāng)需要打印多個(gè)對(duì)象時(shí),對(duì)象之間用逗號(hào)隔開(kāi)??梢詡鹘oprint函數(shù)確定的字符串等數(shù)據(jù),如果傳入一個(gè)表達(dá)式,它會(huì)打印出表達(dá)式的值,可能是布爾值也可能是運(yùn)算結(jié)果。2.2.1print函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3141在Python解釋器中輸入help(print)來(lái)獲取print函數(shù)有哪些參數(shù),如圖2.2所示。2.2.1print函數(shù)圖2.2print函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3142可以看到,print函數(shù)一共有4個(gè)參數(shù),分別是sep、end、file和flush。由于flush參數(shù)在客戶端腳本上基本用不上,這里就不介紹了,其他參數(shù)的含義如下:(1)sep是當(dāng)需要打印多個(gè)對(duì)象時(shí),對(duì)象之間的分隔符,默認(rèn)是一個(gè)空格。(2)end是加在打印文本末尾的字符串,默認(rèn)是換行符,所以當(dāng)使用print函數(shù)時(shí),它是會(huì)默認(rèn)換行的。(3)file指定了文本需要發(fā)送到的文件、標(biāo)準(zhǔn)流或者類似文件的對(duì)象。默認(rèn)是sys.stdout,即它會(huì)將文本輸出到控制臺(tái)上,如果想將文本保存到文件,就可以通過(guò)修改file的值來(lái)達(dá)到目的,但需要注意的是,不能直接把文件名傳給file參數(shù),而應(yīng)該通過(guò)open()函數(shù)將文件傳給file如:file=open(“result.txt”),關(guān)于open函數(shù)會(huì)在以后的章節(jié)講到。2.2.1print函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3143在使用print函數(shù)的時(shí)候,一般不需要把所有參數(shù)都寫(xiě)出來(lái),除非想更改參數(shù)的值,例如print(1,end=’’)就是將1打印出來(lái),但結(jié)尾不換行,而是加一個(gè)空格。下面看一個(gè)例子。>>>a=12>>>b='hello'>>>print(a,b)12hello用‘,’代替print打印的對(duì)象中間的空格。如下:>>>print(a,b,sep=',')12,hello用空格代替打印語(yǔ)句結(jié)尾的換行符。如下:>>>print(a,end='');122.2.1print函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3144最后一條語(yǔ)句的打印結(jié)果雖然看上去和直接打印a沒(méi)有什么不同,但實(shí)際上結(jié)尾是一個(gè)空格而不是換行符。另外,參數(shù)的順序并不固定。也就是說(shuō),print(a,b,sep=’,’,end=’’)語(yǔ)句和print(a,b,end=’’,sep=’,’)語(yǔ)句的作用是完全相同的。如果想將一個(gè)對(duì)象的值在一句話中的特定位置打印顯示出來(lái),可以使用下列語(yǔ)句。打印整數(shù)的語(yǔ)句如下:>>>b=123>>>print('%disanumber'%b)123isanumber>>>2.2.1print函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3145打印浮點(diǎn)數(shù)的語(yǔ)句如下:>>>b=123.56>>>print('Hisweightis%f'%b)Hisweightis123.560000>>>如果打印浮點(diǎn)數(shù)對(duì)小數(shù)位有要求,可以使用下列語(yǔ)句保留兩位小數(shù):>>>b=3.14159>>>print('%.2fisanumber'%b)3.14isanumber打印字符串的語(yǔ)句如下:>>>name='Jack'>>>print('Hisnameis%s'%name)HisnameisJack2.2.1print函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3146此外print函數(shù)可以做一些很有趣的事,例如打印不同形狀的符號(hào)。打印由*組成的正三角形的代碼如下:print('*')print('***')print('*****')print('*******')****************2.2.1print函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3147在使用變量時(shí),要先對(duì)變量進(jìn)行賦值,但如果需要賦給的變量事先不知道,需要用戶提供該怎么辦?這時(shí)候就需要用到輸入函數(shù)input函數(shù)了。在Python3.X中,input函數(shù)接收任意輸入,并將輸入當(dāng)成字符串類型返回(字符串類型會(huì)在后面講到),即使輸入的是數(shù)字。如果需要輸入的是數(shù)字的話,可以使用int()函數(shù)和float()函數(shù)把輸入得到的字符串轉(zhuǎn)成數(shù)字再進(jìn)行操作。2.2.2input函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3148例:>>>x=input("Inputanumber:")Inputanumber:1234>>>type(x)<class'str'>>>>int(x)1234>>>float(x)1234.0>>>如上所示,把輸入的值1234賦給了變量x。除此之外,可以在input函數(shù)里加入一些語(yǔ)句,作為對(duì)輸入信息的要求或提示。2.2.2input函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3149如果有時(shí)僅僅知道需要輸入一個(gè)數(shù),卻不知道輸入的數(shù)的類型,如果這時(shí)貿(mào)然使用int()的函數(shù)的話,可能會(huì)導(dǎo)致程序出錯(cuò),如下:>>>a=input('輸入一個(gè)數(shù)\n')輸入一個(gè)數(shù)2.13>>>a=int(a)Traceback(mostrecentcalllast):File"<pyshell#13>",line1,in<module>a=int(a)ValueError:invalidliteralforint()withbase10:'2.13'>>>這時(shí)候可以用eval()函數(shù),這個(gè)函數(shù)將字符串str當(dāng)成有效的表達(dá)式來(lái)求值并返回計(jì)算結(jié)果。這里只用它來(lái)將輸入的字符串轉(zhuǎn)換成適當(dāng)?shù)臄?shù)。2.2.2input函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3150>>>a=eval(input("輸入一個(gè)數(shù)\n"))輸入一個(gè)數(shù)2.13>>>print(type(a))<class'float'>>>>print(a*2)4.26>>>b=eval(input("輸入一個(gè)數(shù)\n"))輸入一個(gè)數(shù)4>>>print(type(b))<class'int'>2.2.2input函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3151除了input函數(shù)之外,Python標(biāo)準(zhǔn)庫(kù)sys還提供了read()和readline()兩個(gè)函數(shù)用來(lái)從鍵盤(pán)接收字符。read()函數(shù)用來(lái)接收指定數(shù)目的字符。例如:>>>importsys>>>x=sys.stdin.read(4)#讀取4個(gè)字符,如果輸入字符不足則等待,超出只取前4個(gè)abds>>>print(x)abd>>>2.2.3其他輸入輸出函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3152需要注意的是,當(dāng)為讀取緩沖區(qū)的字符時(shí),緩沖區(qū)的字符并不會(huì)消失,當(dāng)再次讀取時(shí)就能繼續(xù)讀取,如下所示。但這一特性有時(shí)候也會(huì)導(dǎo)致讀取數(shù)據(jù)錯(cuò)誤。>>>importsys>>>x=sys.stdin.read(5)abcdefghij>>>print(x)abcde>>>y=sys.stdin.read(5)>>>print(y)fghij>>>當(dāng)緩沖區(qū)的字符數(shù)小于要讀取的字符數(shù)時(shí),會(huì)繼續(xù)等待輸入。2.2.3其他輸入輸出函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3153readline()則是從緩沖區(qū)讀取字符,遇到換行符結(jié)束。例如:>>>importsys>>>x=sys.stdin.readline()abcdefg>>>print(x)abcdefg>>>readline()函數(shù)會(huì)將輸入結(jié)尾的換行符也讀取,readline()函數(shù)也可以帶參數(shù)。如下:importsys>>>x=sys.stdin.readline(5)abcdefghi>>>print(x)abcde2.2.3其他輸入輸出函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of3154當(dāng)輸入超過(guò)所需時(shí),會(huì)截?cái)?,否則就會(huì)遇到換行符結(jié)束。如下:importsys>>>x=sys.stdin.readline(5)abc>>>print(x)abc>>>Python標(biāo)準(zhǔn)庫(kù)pprint提供了另一個(gè)輸出函數(shù)pprint()??梢愿玫目刂戚敵龈袷?。如果要輸出的內(nèi)容多于一行則會(huì)自動(dòng)添加換行和縮進(jìn)來(lái)更好地展示輸出內(nèi)容。在這個(gè)函數(shù)中,參數(shù)indent代表縮進(jìn),width代表一行最大寬度,depth則是打印的深度,這個(gè)主要是針對(duì)一些可遞歸的對(duì)象(關(guān)于遞歸,在函數(shù)章節(jié)中會(huì)講到),如果超出指定depth,其余的用"..."代替。如[1,2,[3]]的深度為2。2.2.3其他輸入輸出函數(shù)第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.2輸入與輸出of31552.2.3其他輸入輸出函數(shù)>>>importpprint>>>data=("thisisalist",[1,2,3,4,5],"thisisyetanotherlist:",[1.0,2.0])>>>pprint.pprint(data,width=30)('thisisalist',[1,2,3,4,5],'thisisyetanotherlist:',[1.0,2.0])>>>print(data)('thisisalist',[1,2,3,4,5],'thisisyetanotherlist:',[1.0,2.0])>>>余下的一些參數(shù)就不細(xì)細(xì)描述了。第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式2.1數(shù)據(jù)類型2.2輸入與輸出of5656第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3157Python運(yùn)算符包括賦值運(yùn)算符、算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、成員運(yùn)算符和身份運(yùn)算符等,分別簡(jiǎn)要介紹如下:(1)算術(shù)運(yùn)算符:用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運(yùn)算,%)、冪運(yùn)算(**)和整除運(yùn)算(//)。(2)關(guān)系運(yùn)算符:用于比較運(yùn)算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)。(3)邏輯運(yùn)算符:用于邏輯運(yùn)算。包括邏輯與(and)、邏輯或(or)、邏輯非(not)。(4)位操作運(yùn)算符:參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括按位與(&)、按位或(|)、按位非(~)、按位異或(^)、左移(<<)、右移(>>)

2.3.1Python語(yǔ)言運(yùn)算符簡(jiǎn)介第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3158(5)賦值運(yùn)算符:用于賦值運(yùn)算,分為簡(jiǎn)單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=,**=,//=)。(6)身份運(yùn)算符:包括is和isnot。(7)成員運(yùn)算符:包括in和notin。表達(dá)式就是數(shù)據(jù)通過(guò)運(yùn)算符以一定規(guī)則連接起來(lái)的式子。下面會(huì)分別介紹各種類型的運(yùn)算符及使用方法。

2.3.1Python語(yǔ)言運(yùn)算符簡(jiǎn)介第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3159表2.3是各個(gè)算術(shù)運(yùn)算符的使用方式及作用。

2.3.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式表2.3算術(shù)運(yùn)算符表算術(shù)運(yùn)算符表達(dá)式含義+a+b對(duì)a和b進(jìn)行加法運(yùn)算-a-b對(duì)a和b進(jìn)行減法運(yùn)算*a*b對(duì)a和b進(jìn)行乘法運(yùn)算/a/b對(duì)a和b進(jìn)行除法運(yùn)算(保留小數(shù)部分)**a**ba的b次冪//a//b對(duì)a和b進(jìn)行整法運(yùn)算(不保留小數(shù)部分)%a%ba對(duì)b取余第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3160在Python3.X中即使兩個(gè)整型的數(shù)進(jìn)行除法運(yùn)算也能保留小數(shù)部位,而不會(huì)將結(jié)果變成整型,如果兩個(gè)浮點(diǎn)數(shù)進(jìn)行整除運(yùn)算,得到的結(jié)果也會(huì)舍去小數(shù)部分,如下所示:>>>5/22.5>>>5.2/22.6>>>需要注意的是,在a+b這個(gè)表達(dá)式中,當(dāng)a和b都是數(shù)字時(shí),執(zhí)行的是加法運(yùn)算,當(dāng)a和b都是字符串時(shí),執(zhí)行的就是合并運(yùn)算了,如‘a(chǎn)bc’+‘def’=‘a(chǎn)bcdef’。這叫運(yùn)算符的重載,關(guān)于重載以后會(huì)講解,除了‘+’之外,‘*’也有重載,下面用代碼來(lái)直觀地看一下。2.3.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3161>>>a=1>>>b=2>>>print(a+b)3>>>print(a*b)2>>>string='hello'>>>string1='world'>>>print(string+string1)helloworld>>>print(string*3)hellohellohello>>>可以看出,當(dāng)執(zhí)行運(yùn)算的對(duì)象數(shù)據(jù)類型不同時(shí),運(yùn)算符的作用也不盡相同。2.3.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3162邏輯運(yùn)算符及表達(dá)式如表2.4所示。2.3.3邏輯運(yùn)算符和邏輯表達(dá)式表2.4邏輯運(yùn)算符邏輯運(yùn)算符表達(dá)式含義andaandb邏輯與oraorb邏輯或notnota邏輯非在表達(dá)式aandb中,只有a的值為真才會(huì)計(jì)算b的值。在表達(dá)式aorb中,只有a的值為假才會(huì)計(jì)算b的值。邏輯運(yùn)算符可以連用,如:aandborc,按照從左到右的順序進(jìn)行判斷,當(dāng)然括號(hào)可以改變運(yùn)算順序。第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3163關(guān)系運(yùn)算符是用來(lái)對(duì)兩個(gè)對(duì)象進(jìn)行比較的。這兩個(gè)對(duì)象可以是任意的,不僅僅是復(fù)雜的數(shù)據(jù)類型,甚至自己定義的類也可以用關(guān)系運(yùn)算符進(jìn)行比較,關(guān)系運(yùn)算符及表達(dá)式如表2.5所示。2.3.4關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系表達(dá)式的值是布爾型的,即只有True和False兩種情況。關(guān)系運(yùn)算符可以連用,如a>b>c,該表達(dá)式等價(jià)于a>bandb>c。但需要注意的是,用來(lái)比較的兩個(gè)對(duì)象一定要是同一數(shù)據(jù)類型的,否則會(huì)出現(xiàn)語(yǔ)法報(bào)錯(cuò)。表2.5關(guān)系運(yùn)算符關(guān)系運(yùn)算符表達(dá)式含義==a==b等于,比較對(duì)象是否相等!=a!=b不等于,判斷對(duì)象是否不相等>

a>b大于<

a<b小于>=a>=b大于等于<=a<=b小于等于第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3164位運(yùn)算符就是把數(shù)字轉(zhuǎn)換成二進(jìn)制的數(shù)字后再進(jìn)行計(jì)算,表2.6是一些位運(yùn)算符。2.3.5位運(yùn)算符接下來(lái)用一些例子說(shuō)明上述位運(yùn)算符的功能。表2.6位運(yùn)算符位運(yùn)算符表達(dá)式含義&a&b按位與運(yùn)算符|a|b按位或運(yùn)算符^a^b按位異或運(yùn)算符,~~a按位取反,如:~0b1001=0b0110<<

a<<n(n為正整數(shù))a左移n位,高位丟棄,低位補(bǔ)0>>

a>>n(n為正整數(shù))a右移n位,低位丟棄,高位補(bǔ)0第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3165表格中前三個(gè)位運(yùn)算符都是將進(jìn)行計(jì)算的兩個(gè)數(shù)字轉(zhuǎn)換成二進(jìn)制數(shù)。這里假設(shè)a=0b10001,b=0b1001,結(jié)果如表2.7所示。2.3.5位運(yùn)算符這里可以看到a和b的位數(shù)不同,在運(yùn)算中,Python會(huì)將位數(shù)少的b補(bǔ)位成0b01001。這里兩個(gè)數(shù)的相應(yīng)部位進(jìn)行邏輯與,邏輯或或者邏輯異或運(yùn)算得到的值就是結(jié)果的相應(yīng)部位。>>>bin(0b100010>>2)'0b1000'>>>bin(0b100010<<2)'0b10001000'表2.7表達(dá)式運(yùn)算表達(dá)式結(jié)果a&b0b1a|b0b11001a^b0b11000第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3166賦值運(yùn)算符,顧名思義就是賦給對(duì)象值的運(yùn)算符。表2.8是賦值運(yùn)算符的種類及含義。2.3.6賦值運(yùn)算符此外,a,b=c,d這樣表達(dá)式也是允許的,即將c賦給a,d賦給b。進(jìn)一步也可以使用a,b=b,a,這樣就是交換a,b的值。表2.8賦值運(yùn)算符賦值運(yùn)算符表達(dá)式含義=a=c將c賦給a+=a+=ca=a+c-=a-=ca=a-c*=a*=ca=a*c/=a/=ca=a/c%=a%=ca=a%c**=a**=ca=a**c//=a//=ca=a//c第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3167賦值時(shí)生成引用而不是復(fù)制拷貝,如下例所示。這是需要注意的。如果想要復(fù)制copy生成兩個(gè)值一樣的對(duì)象而互不干擾??梢允褂胏opy包中的deepcopy函數(shù)。這里不再贅述。>>>L1=[1,2,3]>>>L2=L1>>>L1[0]=2>>>print(L1)[2,2,3]>>>print(L2)[2,2,3]>>>L1=[1,2]>>>print(L2)[2,2,3]>>>print(L1)[1,2]>>>在上面可以看到,當(dāng)把L1的值賦給L2后,修改L1的同時(shí),L2也會(huì)跟著改變。同樣地,修改L2,L1也會(huì)改變。但如果是對(duì)L1重新賦值,指向了另一個(gè)對(duì)象的話,L2則不會(huì)改變的。同樣地,對(duì)L2重新賦值指向了另一個(gè)對(duì)象,L1也不會(huì)改變。2.3.6賦值運(yùn)算符第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3168當(dāng)然,賦值運(yùn)算符有很多的用法,下面用一個(gè)例子來(lái)說(shuō)明。>>>a='hello'>>>print(a)hello>>>a,b='hello',234>>>print(a)hello>>>print(b)234特殊的賦值語(yǔ)句,可以看情況選擇使用。此外所有的賦值運(yùn)算符除了‘=’外,其余的賦值運(yùn)算符都只能對(duì)數(shù)值型對(duì)象使用,當(dāng)然一些特殊情況下‘+=’也可以對(duì)字符串使用。此外,Python不像C語(yǔ)言那樣支持‘++’,‘--’運(yùn)算符。2.3.6賦值運(yùn)算符第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3169在Python里還有兩種運(yùn)算符:成員運(yùn)算符和身份運(yùn)算符。成員運(yùn)算符使用來(lái)判斷某個(gè)對(duì)象在不在某序列中,如表2.9所示。2.3.7其他運(yùn)算符表2.9成員運(yùn)算符成員運(yùn)算符表達(dá)式含義inainlist_a若a在序列l(wèi)ist_a中,該表達(dá)式為真,反之為假notinanotinlist_a若a不在序列l(wèi)ist_a中,該表達(dá)式為真,反之為假第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3170下面看個(gè)例子:>>>list_a=['a','b','c','d']>>>a='a'>>>print(ainlist_a)True>>>print(anotinlist_a)False>>>相信通過(guò)這個(gè)例子,大家可以明白如何去使用成員運(yùn)算符。2.3.7其他運(yùn)算符第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3171身份運(yùn)算符是用來(lái)判斷兩個(gè)變量所指向的對(duì)象是否為同一個(gè)對(duì)象,這一點(diǎn)與之前關(guān)系運(yùn)算符中的“==”不同,因?yàn)椤?=”是判斷兩個(gè)對(duì)象的值是否相等。Python里的變量有3個(gè)屬性,名字,值和id。身份運(yùn)算符就是判斷id是否相同的,其含義如表2.10所示。2.3.7其他運(yùn)算符表2.10身份運(yùn)算符身份運(yùn)算符表達(dá)式含義isaisb若a和b指向的對(duì)象為同一個(gè)對(duì)象,該表達(dá)式為真,反之為假isnotaisnotb若a和b指向的對(duì)象不是同一個(gè)對(duì)象,該表達(dá)式為真,反之為假在Python中,可以使用一個(gè)內(nèi)置函數(shù)id()來(lái)查看變量的id。>>>list1=['a','b','c','d']>>>print(id(list1))1232162124424第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3172除了指向同一個(gè)內(nèi)存的會(huì)共享一個(gè)id外,其余的哪怕兩個(gè)對(duì)象的值相同,id也不會(huì)相同。下面再看一個(gè)例子:>>>ch1='helloworld'>>>ch2='helloworld'>>>print(ch1isch2)False>>>ch1='abcde'>>>ch2='abcde'>>>print(ch1isch2)True2.3.7其他運(yùn)算符第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3173一般情況下,Python會(huì)為每個(gè)對(duì)象分配內(nèi)存,但為了提高內(nèi)存效率,Python3.X里把相等的且只含字母和數(shù)字的字符串指向了同一個(gè)內(nèi)存。是不是只有一些字符串是這樣的呢?>>>num1=257>>>num2=257>>>print(num1isnum2)False>>>num1=256>>>num2=256>>>print(num1isnum2)TruePython3.X中還把-5到256的相等整數(shù)都在內(nèi)存中指向同一個(gè)內(nèi)存,這是需要注意的。2.3.7其他運(yùn)算符第二章數(shù)據(jù)類型、運(yùn)算符及表達(dá)式2.3運(yùn)算符及表達(dá)式of3174Python的算術(shù)表達(dá)式具有優(yōu)先性和結(jié)合性,可以將多個(gè)算術(shù)表達(dá)式通過(guò)算術(shù)運(yùn)算符連接起來(lái)。在進(jìn)行運(yùn)算是,Python會(huì)根據(jù)優(yōu)先性依次計(jì)算。下面是各運(yùn)算符的優(yōu)先級(jí)。如果優(yōu)先性相同,則按從左到右的順序依次執(zhí)行(冪運(yùn)算除外,冪運(yùn)算從右到左)。括號(hào)可以改變優(yōu)先級(jí)。雖然運(yùn)算符有明確的優(yōu)先級(jí),其優(yōu)先級(jí)如表2.11所示,但對(duì)于復(fù)雜的表達(dá)式還是建議在適當(dāng)?shù)奈恢锰砑永ㄌ?hào),讓計(jì)算順序更明確。2.3.8運(yùn)算符的優(yōu)先級(jí)表2.11Python運(yùn)算符優(yōu)先級(jí)表運(yùn)算符描述**指數(shù)(最高優(yōu)先級(jí))~+-按位翻轉(zhuǎn),一元加號(hào)和減號(hào)(最后兩個(gè)的方法

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論