版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
3Python的對(duì)象模型對(duì)象是python語(yǔ)言中最基本的概念,在python中處理的一切都是對(duì)象。python中有許多內(nèi)置對(duì)象可供編程者使用,內(nèi)置對(duì)象可直接使用,如數(shù)字、字符串、列表、del等;非內(nèi)置對(duì)象需要導(dǎo)入模塊才能使用,如正弦函數(shù)sin(x),隨機(jī)數(shù)產(chǎn)生函數(shù)random()等。3Python的對(duì)象模型對(duì)象類(lèi)型類(lèi)型名稱(chēng)示例簡(jiǎn)要說(shuō)明數(shù)字int,float,complex1234,3.14,1.3e5,3+4j數(shù)字大小沒(méi)有限制,內(nèi)置支持復(fù)數(shù)及其運(yùn)算字符串str'swfu',"I'mstudent",'''Python''',r'abc',R'bcd'使用單引號(hào)、雙引號(hào)、三引號(hào)作為定界符,以字母r或R引導(dǎo)的表示原始字符串字節(jié)串bytesb’helloworld’以字母b引導(dǎo),可以使用單引號(hào)、雙引號(hào)、三引號(hào)作為定界符列表list[1,2,3],['a','b',['c',2]]所有元素放在一對(duì)方括號(hào)中,元素之間使用逗號(hào)分隔,其中的元素可以是任意類(lèi)型字典dict{1:'food',2:'taste',3:'import'}所有元素放在一對(duì)大括號(hào)中,元素之間使用逗號(hào)分隔,元素形式為“鍵:值”元組tuple(2,-5,6),(3,)不可變,所有元素放在一對(duì)圓括號(hào)中,元素之間使用逗號(hào)分隔,如果元組中只有一個(gè)元素的話,后面的逗號(hào)不能省略集合setfrozenset{'a','b','c'}所有元素放在一對(duì)大括號(hào)中,元素之間使用逗號(hào)分隔,元素不允許重復(fù);另外,set是可變的,而frozenset是不可變的常用內(nèi)置對(duì)象對(duì)象類(lèi)型類(lèi)型名稱(chēng)示例簡(jiǎn)要說(shuō)明布爾型boolTrue,False邏輯值,關(guān)系運(yùn)算符、成員測(cè)試運(yùn)算符、同一性測(cè)試運(yùn)算符組成的表達(dá)式的值一般為T(mén)rue或False空類(lèi)型NoneTypeNone空值異常Exception、ValueError、TypeError
Python內(nèi)置大量異常類(lèi),分別對(duì)應(yīng)不同類(lèi)型的異常文件
f=
open('data.dat','rb')open是Python內(nèi)置函數(shù),使用指定的模式打開(kāi)文件,返回文件對(duì)象其他可迭代對(duì)象
生成器對(duì)象、range對(duì)象、zip對(duì)象、enumerate對(duì)象、map對(duì)象、filter對(duì)象等等具有惰性求值的特點(diǎn),除range對(duì)象之外,其他對(duì)象中的元素只能看一次編程單元
函數(shù)(使用def定義)類(lèi)(使用class定義)模塊(類(lèi)型為module)類(lèi)和函數(shù)都屬于可調(diào)用對(duì)象,模塊用來(lái)集中存放函數(shù)、類(lèi)、常量或其他對(duì)象續(xù)表3Python的對(duì)象模型3Python代碼規(guī)范(1)縮進(jìn)類(lèi)定義、函數(shù)定義、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu),行尾的冒號(hào)表示縮進(jìn)的開(kāi)始。
python程序是依靠代碼塊的縮進(jìn)來(lái)體現(xiàn)代碼之間的邏輯關(guān)系的,縮進(jìn)結(jié)束就表示一個(gè)代碼塊結(jié)束了。
同一個(gè)級(jí)別的代碼塊的縮進(jìn)量必須相同。一般而言,以4個(gè)空格為基本縮進(jìn)單位。3Python代碼規(guī)范(2)注釋以#開(kāi)始,表示本行#之后的內(nèi)容為注釋。包含在一對(duì)三引號(hào)'''...'''或"""..."""之間且不屬于任何語(yǔ)句的內(nèi)容將被解釋器認(rèn)為是注釋。3Python代碼規(guī)范(3)每個(gè)import語(yǔ)句只導(dǎo)入一個(gè)模塊(4)如果一行語(yǔ)句太長(zhǎng),可以在行尾加上續(xù)行符\來(lái)?yè)Q行分成多行,但是更建議使用括號(hào)來(lái)包含多行內(nèi)容。(5)必要的空格與空行運(yùn)算符兩側(cè)、逗號(hào)后面建議增加一個(gè)空格。不同功能的代碼塊之間、不同的函數(shù)定義之間建議增加一個(gè)空行以增加可讀性。(6)適當(dāng)使用異常處理結(jié)構(gòu)進(jìn)行容錯(cuò),后面將詳細(xì)講解。(7)軟件應(yīng)具有較強(qiáng)的可測(cè)試性,測(cè)試與開(kāi)發(fā)齊頭并進(jìn)。在Python中,不需要事先聲明變量名及其類(lèi)型,直接賦值即可創(chuàng)建各種類(lèi)型的對(duì)象變量。這一點(diǎn)適用于Python任意類(lèi)型的對(duì)象。例如語(yǔ)句>>>x=3創(chuàng)建了整型變量x,并賦值為3,再例如語(yǔ)句>>>x='Helloworld.'創(chuàng)建了字符串變量x,并賦值為'Helloworld.'。3Python變量憑空出現(xiàn)一個(gè)整型變量x新的字符串變量,再也不是原來(lái)的x了3Python變量Python屬于強(qiáng)類(lèi)型編程語(yǔ)言,Python解釋器會(huì)根據(jù)賦值或運(yùn)算來(lái)自動(dòng)推斷變量類(lèi)型。Python還是一種動(dòng)態(tài)類(lèi)型語(yǔ)言,變量的類(lèi)型也是可以隨時(shí)變化的。>>>x=3>>>print(type(x))<class'int'>>>>x='Helloworld.'>>>print(type(x))#查看變量類(lèi)型<class'str'>>>>x=[1,2,3]>>>print(type(x))<class'list'>>>>isinstance(3,int)#測(cè)試對(duì)象是否是某個(gè)類(lèi)型的實(shí)例True>>>isinstance('Helloworld',str)True3Python變量如果變量出現(xiàn)在賦值運(yùn)算符或復(fù)合賦值運(yùn)算符(例如+=、*=等等)的左邊則表示創(chuàng)建變量或修改變量的值,否則表示引用該變量的值,這一點(diǎn)同樣適用于使用下標(biāo)來(lái)訪問(wèn)列表、字典等可變序列以及其他自定義對(duì)象中元素的情況。>>>x=3#創(chuàng)建整型變量>>>print(x**2)9>>>x+=6#修改變量值>>>print(x)#讀取變量值并輸出顯示9>>>x=[1,2,3]#創(chuàng)建列表對(duì)象>>>x[1]=5#修改列表元素值>>>print(x)#輸出顯示整個(gè)列表[1,5,3]>>>print(x[2])#輸出顯示列表指定元素33Python變量字符串和元組屬于不可變序列,不能通過(guò)下標(biāo)的方式來(lái)修改其中的元素值,試圖修改元組中元素的值時(shí)會(huì)拋出異常。>>>x=(1,2,3)>>>print(x)(1,2,3)>>>x[1]=5Traceback(mostrecentcalllast):File"<pyshell#7>",line1,in<module>x[1]=5TypeError:'tuple'objectdoesnotsupportitemassignment3Python變量在Python中,允許多個(gè)變量指向同一個(gè)值,例如:>>>x=3>>>id(x)1786684560>>>y=x>>>id(y)1786684560然而,當(dāng)為其中一個(gè)變量修改值以后,其內(nèi)存地址將會(huì)變化,但這并不影響另一個(gè)變量,例如接著上面的代碼再繼續(xù)執(zhí)行下面的代碼:>>>x+=6>>>id(x)1786684752>>>y3>>>id(yython變量Python采用的是基于值的內(nèi)存管理方式,如果為不同變量賦值為相同值,這個(gè)值在內(nèi)存中只有一份,多個(gè)變量指向同一塊內(nèi)存地址。>>>x=3>>>id(x)10417624>>>y=3>>>id(y)10417624>>>x=[1,1,1,1]>>>id(x[0])==id(x[1])True3Python變量賦值語(yǔ)句的執(zhí)行過(guò)程是:首先把等號(hào)右側(cè)表達(dá)式的值計(jì)算出來(lái),然后在內(nèi)存中尋找一個(gè)位置把值存放進(jìn)去,最后創(chuàng)建變量并指向這個(gè)內(nèi)存地址。Python中的變量并不直接存儲(chǔ)值,而是存儲(chǔ)了值的內(nèi)存地址或者引用,這也是變量類(lèi)型隨時(shí)可以改變的原因。Python具有自動(dòng)內(nèi)存管理功能,對(duì)于沒(méi)有任何變量指向的值,Python自動(dòng)將其刪除。Python會(huì)跟蹤所有的值,并自動(dòng)刪除不再有變量指向的值。因此,Python程序員一般情況下不需要太多考慮內(nèi)存管理的問(wèn)題。盡管如此,顯式使用del命令刪除不需要的值或顯式關(guān)閉不再需要訪問(wèn)的資源,仍是一個(gè)好的習(xí)慣,同時(shí)也是一個(gè)優(yōu)秀程序員的基本素養(yǎng)之一。3Python變量在定義變量名的時(shí)候,需要注意以下問(wèn)題:變量名必須以字母或下劃線開(kāi)頭,但以下劃線開(kāi)頭的變量在Python中有特殊含義;變量名中不能有空格以及標(biāo)點(diǎn)符號(hào)(括號(hào)、引號(hào)、逗號(hào)、斜線、反斜線、冒號(hào)、句號(hào)、問(wèn)號(hào)等等);不能使用關(guān)鍵字作變量名,可以導(dǎo)入keyword模塊后使用print(keyword.kwlist)查看所有Python關(guān)鍵字;不建議使用系統(tǒng)內(nèi)置的模塊名、類(lèi)型名或函數(shù)名以及已導(dǎo)入的模塊名及其成員名作變量名,這將會(huì)改變其類(lèi)型和含義,可以通過(guò)dir(__builtins__)查看所有內(nèi)置模塊、類(lèi)型和函數(shù);變量名對(duì)英文字母的大小寫(xiě)敏感,例如student和Student是不同的變量。3數(shù)字?jǐn)?shù)字是不可變對(duì)象,可以表示任意大小的數(shù)字。>>>a=99999999999999999999999999999999>>>a*a9999999999999999999999999999999800000000000000000000000000000001>>>a**3999999999999999999999999999999970000000000000000000000000000000299999999999999999999999999999999Python的IDEL交互界面可以當(dāng)做簡(jiǎn)便計(jì)算器來(lái)使用。>>>((3**2)+(4**2))**0.55.03數(shù)字Python中的整數(shù)類(lèi)型可以分為:十進(jìn)制整數(shù)如,0、-1、9、123十六進(jìn)制整數(shù),需要16個(gè)數(shù)字0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f來(lái)表示整數(shù),必須以0x開(kāi)頭,如0x10、0xfa、0xabcdef八進(jìn)制整數(shù),只需要8個(gè)數(shù)字0、1、2、3、4、5、6、7來(lái)表示整數(shù),必須以0o開(kāi)頭,如0o35、0o11二進(jìn)制整數(shù),只需要2個(gè)數(shù)字0、1來(lái)表示整數(shù),必須以0b開(kāi)頭如,0b101、0b1003數(shù)字浮點(diǎn)數(shù)又稱(chēng)小數(shù)15.0、0.37、-11.2、1.2e2、314.15e-23數(shù)字Python內(nèi)置支持復(fù)數(shù)類(lèi)型。>>>a=3+4j>>>b=5+6j>>>c=a+b>>>c(8+10j)>>>c.real#查看復(fù)數(shù)實(shí)部8.0>>>c.imag#查看復(fù)數(shù)虛部10.0>>>a.conjugate()#返回共軛復(fù)數(shù)(3-4j)>>>a*b#復(fù)數(shù)乘法(-9+38j)>>>a/b#復(fù)數(shù)除法(0.6393442622950819+0.03278688524590165j)Python3.6.x開(kāi)始支持在數(shù)字中間位置使用單個(gè)下劃線作為分隔來(lái)提高數(shù)字的可讀性,類(lèi)似于數(shù)學(xué)上使用逗號(hào)作為千位分隔符。>>>1_000_0001000000>>>1_2_3_41234>>>1_2+3_4j(12+34j)>>>1_2.3_4512.3453數(shù)字3運(yùn)算符和表達(dá)式運(yùn)算符功能說(shuō)明+算術(shù)加法,列表、元組、字符串合并與連接,正號(hào)-算術(shù)減法,集合差集,相反數(shù)*算術(shù)乘法,序列重復(fù)/真除法//求整商,但如果操作數(shù)中有實(shí)數(shù)的話,結(jié)果為實(shí)數(shù)形式的整數(shù)%求余數(shù),字符串格式化**冪運(yùn)算<、<=、>、>=、==、!=(值)大小比較,集合的包含關(guān)系比較or邏輯或and邏輯與not邏輯非in成員測(cè)試is對(duì)象同一性測(cè)試,即測(cè)試是否為同一個(gè)對(duì)象或內(nèi)存地址是否相同|、^、&、<<、>>、~位或、位異或、位與、左移位、右移位、位求反&、|、^集合交集、并集、對(duì)稱(chēng)差集@矩陣相乘運(yùn)算符Python運(yùn)算符與功能+運(yùn)算符除了用于算術(shù)加法以外,還可以用于列表、元組、字符串的連接,但不支持不同類(lèi)型的對(duì)象之間相加或連接。>>>[1,2,3]+[4,5,6]#連接兩個(gè)列表[1,2,3,4,5,6]>>>(1,2,3)+(4,)#連接兩個(gè)元組(1,2,3,4)>>>'abcd'+'1234'#連接兩個(gè)字符串'abcd1234'>>>'A'+1#不支持字符與數(shù)字相加,拋出異常TypeError:Can'tconvert'int'objecttostrimplicitly>>>True+3#Python內(nèi)部把True當(dāng)作1處理4>>>False+3#把False當(dāng)作0處理33運(yùn)算符和表達(dá)式3運(yùn)算符和表達(dá)式*運(yùn)算符不僅可以用于數(shù)值乘法,還可以用于列表、字符串、元組等類(lèi)型,當(dāng)列表、字符串或元組等類(lèi)型變量與整數(shù)進(jìn)行“*”運(yùn)算時(shí),表示對(duì)內(nèi)容進(jìn)行重復(fù)并返回重復(fù)后的新對(duì)象。>>>2.0*3
#浮點(diǎn)數(shù)與整數(shù)相乘6.0>>>(3+4j)*2
#復(fù)數(shù)與整數(shù)相乘(6+8j)>>>(3+4j)*(3-4j)
#復(fù)數(shù)與復(fù)數(shù)相乘(25+0j)>>>"a"*10
#字符串重復(fù)'aaaaaaaaaa'>>>[1,2,3]*3
#列表重復(fù)[1,2,3,1,2,3,1,2,3]>>>(1,2,3)*3
#元組重復(fù)(1,2,3,1,2,3,1,2,3)3運(yùn)算符和表達(dá)式Python中的除法有兩種,“/”和“//”分別表示除法和整除運(yùn)算。>>>3/50.6>>>3//50>>>3.0/50.6>>>3.0//50.0>>>13//101>>>-13//10-23運(yùn)算符和表達(dá)式%運(yùn)算符除去可以用于字符串格式化之外,還可以對(duì)整數(shù)和浮點(diǎn)數(shù)計(jì)算余數(shù)。但是由于浮點(diǎn)數(shù)的精確度影響,計(jì)算結(jié)果可能略有誤差。>>>3.1%21.1>>>6.3%2.12.0999999999999996>>>6%20>>>6.0%20.0>>>6.0%2.00.0>>>5.7%4.80.9000000000000004關(guān)系運(yùn)算符可以連用,一般用于同類(lèi)型對(duì)象之間值的大小比較,或者測(cè)試集合之間的包含關(guān)系>>>1<3<5#等價(jià)于1<3and3<5True>>>'Hello'>'world'#比較字符串大小False>>>[1,2,3]<[1,2,4]#比較列表大小True>>>'Hello'>3#字符串和數(shù)字不能比較TypeError:unorderabletypes:str()>int()>>>{1,2,3}<{1,2,3,4}#測(cè)試是否子集True3運(yùn)算符和表達(dá)式成員測(cè)試運(yùn)算符in用于成員測(cè)試,即測(cè)試一個(gè)對(duì)象是否為另一個(gè)對(duì)象的元素。>>>3in[1,2,3]#測(cè)試3是否存在于列表[1,2,3]中True>>>5inrange(1,10,1)#range()是用來(lái)生成指定范圍數(shù)字的內(nèi)置函數(shù)True>>>'abc'in'abcdefg'#子字符串測(cè)試True>>>foriin(3,5,7):#循環(huán),成員遍歷print(i,end='\t')3 5 7 3運(yùn)算符和表達(dá)式同一性測(cè)試運(yùn)算符(identitycomparison)is用來(lái)測(cè)試兩個(gè)對(duì)象是否是同一個(gè),如果是則返回True,否則返回False。如果兩個(gè)對(duì)象是同一個(gè),二者具有相同的內(nèi)存地址。>>>3is3True>>>x=[300,300,300]>>>x[0]isx[1]#基于值的內(nèi)存管理,同一個(gè)值在內(nèi)存中只有一份True>>>x=[1,2,3]>>>y=[1,2,3]>>>xisy#上面形式創(chuàng)建的x和y不是同一個(gè)列表對(duì)象False3運(yùn)算符和表達(dá)式位運(yùn)算符只能用于整數(shù),其內(nèi)部執(zhí)行過(guò)程為:首先將整數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),然后右對(duì)齊,必要的時(shí)候左側(cè)補(bǔ)0,按位進(jìn)行運(yùn)算,最后再把計(jì)算結(jié)果轉(zhuǎn)換為十進(jìn)制數(shù)字返回。>>>3<<2#把3左移2位12>>>3&7#位與運(yùn)算3>>>3|8#位或運(yùn)算11>>>3^5#位異或運(yùn)算63運(yùn)算符和表達(dá)式位運(yùn)算符規(guī)則集合的交集、并集、對(duì)稱(chēng)差集等運(yùn)算借助于位運(yùn)算符來(lái)實(shí)現(xiàn),而差集則使用減號(hào)運(yùn)算符實(shí)現(xiàn)(注意,并集運(yùn)算符不是加號(hào))。3運(yùn)算符和表達(dá)式集合的交集、并集、對(duì)稱(chēng)差集等運(yùn)算借助于位運(yùn)算符來(lái)實(shí)現(xiàn),而差集則使用減號(hào)運(yùn)算符實(shí)現(xiàn)(注意,并集運(yùn)算符不是加號(hào))。>>>{1,2,3}|{3,4,5}#并集,自動(dòng)去除重復(fù)元素{1,2,3,4,5}>>>{1,2,3}&{3,4,5}#交集{3}>>>{1,2,3}^{3,4,5}#對(duì)稱(chēng)差集{1,2,4,5}>>>{1,2,3}-{3,4,5}#差集{1,2}3運(yùn)算符和表達(dá)式and和or具有惰性求值特點(diǎn),只計(jì)算必須計(jì)算的表達(dá)式。>>>3>5anda>3#注意,此時(shí)并沒(méi)有定義變量aFalse>>>3>5ora>3#3>5的值為False,所以需要計(jì)算后面表達(dá)式NameError:name'a'isnotdefined>>>3<5ora>3#3<5的值為T(mén)rue,不需要計(jì)算后面表達(dá)式True>>>3and5#最后一個(gè)計(jì)算的表達(dá)式的值作為整個(gè)表達(dá)式的值5>>>3and5>2True>>>3notin[1,2,3]#邏輯非運(yùn)算notFalse>>>3isnot5#not的計(jì)算結(jié)果只能是True或False之一True3運(yùn)算符和表達(dá)式3運(yùn)算符和表達(dá)式逗號(hào)并不是運(yùn)算符,只是一個(gè)普通分隔符。>>>'a'in'b','a'(False,'a')>>>'a'in('b','a')True>>>x=3,5>>>x(3,5)>>>3==3,5(True,5)>>>x=3+5,7>>>x(8,7)Python不支持++和--運(yùn)算符,雖然在形式上有時(shí)候似乎可以這樣用,但實(shí)際上是另外的含義。>>>i=3>>>++i#正正得正3>>>+(+3)#與++i等價(jià)3>>>i++#Python不支持++運(yùn)算符,語(yǔ)法錯(cuò)誤SyntaxError:invalidsyntax>>>--i#負(fù)負(fù)得正3>>>-(-i)#與--i等價(jià)33運(yùn)算符和表達(dá)式3字符串用單引號(hào)、雙引號(hào)或三引號(hào)界定的符號(hào)系列稱(chēng)為字符串單引號(hào)、雙引號(hào)、三單引號(hào)、三雙引號(hào)可以互相嵌套,用來(lái)表示復(fù)雜字符串'abc'、'123'、'中國(guó)'、"Python"、'''Tomsaid,"Let'sgo"'''字符串屬于不可變序列空字符串表示為''或""
三引號(hào)'''或"""表示的字符串可以換行,支持排版較為復(fù)雜的字符串;三引號(hào)還可以在程序中表示較長(zhǎng)的注釋。3字符串字符串合并>>>a='abc'+'123'#生成新字符串>>>x='1234''abcd'>>>x'1234abcd'>>>x=x+',.;'>>>x'1234abcd,.;'>>>x=x'efg'#不允許這樣連接字符串SyntaxError:invalidsyntax字符串格式化>>>a=3.6674>>>'%7.3f'%a'3.667'>>>"%d:%c"%(65,65)'65:A'>>>"""Mynameis%s,andmyageis%d"""%('DongFuguo',39)'MynameisDongFuguo,andmyageis39'3字符串3字符串常用轉(zhuǎn)義字符轉(zhuǎn)義字符含義轉(zhuǎn)義字符含義\b退格,把光標(biāo)移動(dòng)到前一列位置\\一個(gè)斜線\\f換頁(yè)符\’單引號(hào)’\n換行符\”雙引號(hào)”\r回車(chē)\ooo3位八進(jìn)制數(shù)對(duì)應(yīng)的字符\t水平制表符\xhh2位十六進(jìn)制數(shù)對(duì)應(yīng)的字符\v垂直制表符\uhhhh4位十六進(jìn)制數(shù)表示的Unicode字符轉(zhuǎn)義字符用法>>>print('Hello\nWorld')#包含轉(zhuǎn)義字符的字符串HelloWorld>>>print('\101')#三位八進(jìn)制數(shù)對(duì)應(yīng)的字符A>>>print('\x41')#兩位十六進(jìn)制數(shù)對(duì)應(yīng)的字符A>>>print('我是\u8463\u4ed8\u56fd')#四位十六進(jìn)制數(shù)表示Unicode字符我是董付國(guó)3字符串3字符串字符串界定符前面加字母r或R表示原始字符串,其中的特殊字符不進(jìn)行轉(zhuǎn)義,但字符串的最后一個(gè)字符不能是\。原始字符串主要用于正則表達(dá)式、文件路徑或者URL的場(chǎng)合。>>>path='C:\Windows\notepad.exe'>>>print(path)#字符\n被轉(zhuǎn)義為換行符C:\Windowsotepad.exe>>>path=r'C:\Windows\notepad.exe'#原始字符串,任何字符都不轉(zhuǎn)義>>>print(path)C:\Windows\notepad.exe3常用內(nèi)置函數(shù)內(nèi)置函數(shù)不需要導(dǎo)入任何模塊即可使用執(zhí)行下面的命令可以列出所有內(nèi)置函數(shù)>>>dir(__builtins__)函數(shù)功能簡(jiǎn)要說(shuō)明abs(x)返回?cái)?shù)字x的絕對(duì)值或復(fù)數(shù)x的模all(iterable)如果對(duì)于可迭代對(duì)象中所有元素x都等價(jià)于True,也就是對(duì)于所有元素x都有bool(x)等于True,則返回True。對(duì)于空的可迭代對(duì)象也返回Trueany(iterable)只要可迭代對(duì)象iterable中存在元素x使得bool(x)為T(mén)rue,則返回True。對(duì)于空的可迭代對(duì)象,返回Falseascii(obj)把對(duì)象轉(zhuǎn)換為ASCII碼表示形式,必要的時(shí)候使用轉(zhuǎn)義字符來(lái)表示特定的字符bin(x)把整數(shù)x轉(zhuǎn)換為二進(jìn)制串表示形式bool(x)返回與x等價(jià)的布爾值True或Falsebytes(x)生成字節(jié)串,或把指定對(duì)象x轉(zhuǎn)換為字節(jié)串表示形式callable(obj)測(cè)試對(duì)象obj是否可調(diào)用。類(lèi)和函數(shù)是可調(diào)用的,包含__call__()方法的類(lèi)的對(duì)象也是可調(diào)用的compile()用于把Python代碼編譯成可被exec()或eval()函數(shù)執(zhí)行的代碼對(duì)象complex(real,[imag])返回復(fù)數(shù)chr(x)返回Unicode編碼為x的字符3常用內(nèi)置函數(shù)函數(shù)功能簡(jiǎn)要說(shuō)明delattr(obj,name)刪除屬性,等價(jià)于deldir(obj)返回指定對(duì)象或模塊obj的成員列表,如果不帶參數(shù)則返回當(dāng)前作用域內(nèi)所有標(biāo)識(shí)符divmod(x,y)返回包含整商和余數(shù)的元組((x-x%y)/y,x%y)enumerate(iterable[,start])返回包含元素形式為(0,iterable[0]),(1,iterable[1]),(2,iterable[2]),...的迭代器對(duì)象eval(s[,globals[,locals]])計(jì)算并返回字符串s中表達(dá)式的值exec(x)執(zhí)行代碼或代碼對(duì)象xexit()退出當(dāng)前解釋器環(huán)境filter(func,seq)返回filter對(duì)象,其中包含序列seq中使得單參數(shù)函數(shù)func返回值為T(mén)rue的那些元素,如果函數(shù)func為None則返回包含seq中等價(jià)于True的元素的filter對(duì)象float(x)把整數(shù)或字符串x轉(zhuǎn)換為浮點(diǎn)數(shù)并返回frozenset([x]))創(chuàng)建不可變的集合對(duì)象getattr(obj,name[,default])獲取對(duì)象中指定屬性的值,等價(jià)于,如果不存在指定屬性則返回default的值,如果要訪問(wèn)的屬性不存在并且沒(méi)有指定default則拋出異常續(xù)表13常用內(nèi)置函數(shù)函數(shù)功能簡(jiǎn)要說(shuō)明globals()返回包含當(dāng)前作用域內(nèi)全局變量及其值的字典hasattr(obj,name)測(cè)試對(duì)象obj是否具有名為name的成員hash(x)返回對(duì)象x的哈希值,如果x不可哈希則拋出異常help(obj)返回對(duì)象obj的幫助信息hex(x)把整數(shù)x轉(zhuǎn)換為十六進(jìn)制串id(obj)返回對(duì)象obj的標(biāo)識(shí)(內(nèi)存地址)input([提示])顯示提示,接收鍵盤(pán)輸入的內(nèi)容,返回字符串int(x[,d])返回實(shí)數(shù)(float)、分?jǐn)?shù)(Fraction)或高精度實(shí)數(shù)(Decimal)x的整數(shù)部分,或把d進(jìn)制的字符串x轉(zhuǎn)換為十進(jìn)制并返回,d默認(rèn)為十進(jìn)制isinstance(obj,class-or-type-or-tuple)測(cè)試對(duì)象obj是否屬于指定類(lèi)型(如果有多個(gè)類(lèi)型的話需要放到元組中)的實(shí)例iter(...)返回指定對(duì)象的可迭代對(duì)象len(obj)返回對(duì)象obj包含的元素個(gè)數(shù),適用于列表、元組、集合、字典、字符串以及range對(duì)象和其他可迭代對(duì)象續(xù)表23常用內(nèi)置函數(shù)函數(shù)功能簡(jiǎn)要說(shuō)明list([x])、set([x])、tuple([x])、dict([x])把對(duì)象x轉(zhuǎn)換為列表、集合、元組或字典并返回,或生成空列表、空集合、空元組、空字典locals()返回包含當(dāng)前作用域內(nèi)局部變量及其值的字典map(func,*iterables)返回包含若干函數(shù)值的map對(duì)象,函數(shù)func的參數(shù)分別來(lái)自于iterables指定的每個(gè)迭代對(duì)象,max(x)、min(x)返回可迭代對(duì)象x中的最大值、最小值,要求x中的所有元素之間可比較大小,允許指定排序規(guī)則和x為空時(shí)返回的默認(rèn)值next(iterator[,default])返回可迭代對(duì)象x中的下一個(gè)元素,允許指定迭代結(jié)束之后繼續(xù)迭代時(shí)返回的默認(rèn)值oct(x)把整數(shù)x轉(zhuǎn)換為八進(jìn)制串open(name[,mode])以指定模式mode打開(kāi)文件name并返回文件對(duì)象ord(x)返回1個(gè)字符x的Unicode編碼pow(x,y,z=None)返回x的y次方,等價(jià)于x**y或(x**y)%z續(xù)表33常用內(nèi)置函數(shù)函數(shù)功能簡(jiǎn)要說(shuō)明print(value,...,sep='',end='\n',file=sys.stdout,flush=False)基本輸出函數(shù)quit()退出當(dāng)前解釋器環(huán)境range([start,]end[,step])返回range對(duì)象,其中包含左閉右開(kāi)區(qū)間[start,end)內(nèi)以step為步長(zhǎng)的整數(shù)reduce(func,sequence[,initial])將雙參數(shù)的函數(shù)func以迭代的方式從左到右依次應(yīng)用至序列seq中每個(gè)元素,最終返回單個(gè)值作為結(jié)果。在Python2.x中該函數(shù)為內(nèi)置函數(shù),在Python3.x中需要從functools中導(dǎo)入reduce函數(shù)再使用repr(obj)返回對(duì)象obj的規(guī)范化字符串表示形式,對(duì)于大多數(shù)對(duì)象有eval(repr(obj))==objreversed(seq)返回seq(可以是列表、元組、字符串、range以及其他可迭代對(duì)象)中所有元素逆序后的迭代器對(duì)象續(xù)表43常用內(nèi)置函數(shù)函數(shù)功能簡(jiǎn)要說(shuō)明round(x[,小數(shù)位數(shù)])對(duì)x進(jìn)行四舍五入,若不指定小數(shù)位數(shù),則返回整數(shù)sorted(iterable,key=None,reverse=False)返回排序后的列表,其中iterable表示要排序的序列或迭代對(duì)象,key用來(lái)指定排序規(guī)則或依據(jù),reverse用來(lái)指定升序或降序。該函數(shù)不改變iterable內(nèi)任何元素的順序str(obj)把對(duì)象obj直接轉(zhuǎn)換為字符串sum(x,start=0)返回序列x中所有元素之和,返回start+sum(x)type(obj)返回對(duì)象obj的類(lèi)型zip(seq1[,seq2[...]])返回zip對(duì)象,其中元素為(seq1[i],seq2[i],...)形式的元組,最終結(jié)果中包含的元素個(gè)數(shù)取決于所有參數(shù)序列或可迭代對(duì)象中最短的那個(gè)續(xù)表53常用內(nèi)置函數(shù)3常用內(nèi)置函數(shù)dir()函數(shù)可以查看指定模塊中包含的所有成員或者指定對(duì)象類(lèi)型所支持的操作。help()函數(shù)則返回指定模塊或函數(shù)的說(shuō)明文檔。內(nèi)置函數(shù)bin()、oct()、hex()用來(lái)將整數(shù)轉(zhuǎn)換為二進(jìn)制、八進(jìn)制和十六進(jìn)制形式,這三個(gè)函數(shù)都要求參數(shù)必須為整數(shù)。>>>bin(555)#把數(shù)字轉(zhuǎn)換為二進(jìn)制串'0b1000101011'>>>oct(555)#轉(zhuǎn)換為八進(jìn)制串'0o1053'>>>hex(555)#轉(zhuǎn)換為十六進(jìn)制串'0x22b'3常用內(nèi)置函數(shù)3常用內(nèi)置函數(shù)ord()和chr()是一對(duì)功能相反的函數(shù),ord()用來(lái)返回單個(gè)字符的序數(shù)或Unicode碼,而chr()則用來(lái)返回某序數(shù)對(duì)應(yīng)的字符,str()則直接將其任意類(lèi)型參數(shù)轉(zhuǎn)換為字符串。>>>ord('a')>>>chr(65)97
'A'>>>chr(ord('A')+1)>>>str(1)'B'
'1'>>>str(1234)>>>str([1,2,3])'1234'
'[1,2,3]'>>>str((1,2,3))>>>str({1,2,3})'(1,2,3)'
'{1,2,3}'3常用內(nèi)置函數(shù)max()、min()、sum()這三個(gè)內(nèi)置函數(shù)分別用于計(jì)算列表、元組或其他可迭代對(duì)象中所有元素最大值、最小值以及所有元素之和,sum()要求元素支持加法運(yùn)算,max()和min()則要求序列或可迭代對(duì)象中的元素之間可比較大小。>>>importrandom>>>a=[random.randint(1,100)foriinrange(10)]#列表推導(dǎo)式>>>a[72,26,80,65,34,86,19,74,52,40]>>>print(max(a),min(a),sum(a))8619548如果需要計(jì)算該列表中的所有元素的平均值,可以直接這樣用:>>>sum(a)/len(a)54.83常用內(nèi)置函數(shù)內(nèi)置函數(shù)max()和min()的key參數(shù)可以用來(lái)指定比較規(guī)則。>>>x=['21','1234','9']>>>max(x)'9'>>>max(x,key=len)'1234'>>>max(x,key=int)'1234'3常用內(nèi)置函數(shù)>>>fromrandomimportrandrange>>>x=[[randrange(1,100)foriinrange(10)]forjinrange(5)]>>>foriteminx: print(item)
[15,50,38,53,58,13,22,54,7,45][45,63,58,89,85,91,77,45,53,50][80,10,46,16,71,73,13,68,94,50][66,4,49,67,26,58,52,46,69,99][35,57,63,35,71,18,86,2,16,87]>>>max(x,key=sum)#求所有元素之和最大的子列表[45,63,58,89,85,91,77,45,53,50]這里要打兩個(gè)回車(chē)才會(huì)執(zhí)行代碼內(nèi)置函數(shù)sum()的start參數(shù)可以實(shí)現(xiàn)非數(shù)值型列表元素的求和。>>>sum([1,2,3,4])10>>>sum([[1],[2],[3],[4]],[])[1,2,3,4]3常用內(nèi)置函數(shù)內(nèi)置函數(shù)type()和isinstance()可以判斷數(shù)據(jù)類(lèi)型。>>>type([3])#查看[3]的類(lèi)型<class'list'>>>>type({3})in(list,tuple,dict)#判斷{3}是否為list,tuple#或dict類(lèi)型的實(shí)例False>>>isinstance(3,int)#判斷3是否為int類(lèi)型的實(shí)例True>>>isinstance(3j,(int,float,complex))#判斷3j是否為int,float#或complex類(lèi)型True3常用內(nèi)置函數(shù)sorted()對(duì)列表、元組、字典、集合或其他可迭代對(duì)象進(jìn)行排序并返回新列表。>>>x=['aaaa','bc','d','b','ba']>>>sorted(x,key=lambdaitem:(len(item),item))#先按長(zhǎng)度排序,長(zhǎng)度一樣的正常排序['b','d','ba','bc','aaaa']3常用內(nèi)置函數(shù)reversed()對(duì)可迭代對(duì)象(生成器對(duì)象和具有惰性求值特性的zip、map、filter、enumerate等類(lèi)似對(duì)象除外)進(jìn)行翻轉(zhuǎn)(首尾交換)并返回可迭代的reversed對(duì)象。>>>x=['aaaa','bc','d','b','ba']>>>reversed(x)#逆序,返回reversed對(duì)象<list_reverseiteratorobjectat0x0000000002E6C3C8>>>>list(reversed(x))#reversed對(duì)象是可迭代的['ba','b','d','bc','aaaa']3常用內(nèi)置函數(shù)range()語(yǔ)法格式為range([start,]end[,step]),返回具有惰性求值特點(diǎn)的range對(duì)象,其中包含左閉右開(kāi)區(qū)間[start,end)內(nèi)以step為步長(zhǎng)的整數(shù)。參數(shù)start默認(rèn)為0,step默認(rèn)為1。>>>range(5)#start默認(rèn)為0,step默認(rèn)為1range(0,5)>>>list(_)[0,1,2,3,4]>>>list(range(1,10,2))#指定起始值和步長(zhǎng)[1,3,5,7,9]>>>list(range(9,0,-2))#步長(zhǎng)為負(fù)數(shù)時(shí),start應(yīng)比end大[9,7,5,3,1]3常用內(nèi)置函數(shù)enumerate()函數(shù)用來(lái)枚舉可迭代對(duì)象中的元素,返回可迭代的enumerate對(duì)象,其中每個(gè)元素都是包含索引和值的元組。>>>list(enumerate('abcd'))#枚舉字符串中的元素[(0,'a'),(1,'b'),(2,'c'),(3,'d')]>>>list(enumerate(['Python','Greate']))#枚舉列表中的元素[(0,'Python'),(1,'Greate')]>>>list(enumerate({'a':97,'b':98,'c':99}.items()))#枚舉字典中的元素[(0,('a',97)),(1,('b',98)),(2,('c',99))]>>>forindex,valueinenumerate(range(10,15)):#枚舉range對(duì)象中的元素 print((index,value),end='')(0,10)(1,11)(2,12)(3,13)(4,14)3常用內(nèi)置函數(shù)內(nèi)置函數(shù)map()把一個(gè)函數(shù)func依次映射到序列或迭代器對(duì)象的每個(gè)元素上,并返回一個(gè)可迭代的map對(duì)象作為結(jié)果,map對(duì)象中每個(gè)元素是原序列中元素經(jīng)過(guò)函數(shù)func處理后的結(jié)果。>>>list(map(str,range(5)))#把列表中元素轉(zhuǎn)換為字符串['0','1','2','3','4']>>>defadd5(v):#單參數(shù)函數(shù) returnv+5>>>list(map(add5,range(10)))#把單參數(shù)函數(shù)映射到一個(gè)序列的所有元素[5,6,7,8,9,10,11,12,13,14]>>>defadd(x,y):#可以接收2個(gè)參數(shù)的函數(shù) returnx+y>>>list(map(add,range(5),range(5,10)))#把雙參數(shù)函數(shù)映射到兩個(gè)序列上[5,7,9,11,13]3常用內(nèi)置函數(shù)3常用內(nèi)置函數(shù)>>>defmyMap(iterable,op,value):#自定義函數(shù)ifopnotin'+-*/':#實(shí)現(xiàn)序列與數(shù)字的四則運(yùn)算return'Erroroperator'func=lambdai:eval(repr(i)+op+repr(value))returnmap(func,iterable)>>>list(myMap(range(5),'+',5))[5,6,7,8,9]>>>list(myMap(range(5),'-',5))[-5,-4,-3,-2,-1]>>>list(myMap(range(5),'*',5))[0,5,10,15,20]>>>list(myMap(range(5),'/',5))[0.0,0.2,0.4,0.6,0.8]3常用內(nèi)置函數(shù)>>>importrandom>>>x=random.randint(1,1e30)#生成指定范圍內(nèi)的隨機(jī)整數(shù)>>>x839746558215897242220046223150>>>list(map(int,str(x)))#提取大整數(shù)每位上的數(shù)字[8,3,9,7,4,6,5,5,8,2,1,5,8,9,7,2,4,2,2,2,0,0,4,6,2,2,3,1,5,0]3常用內(nèi)置函數(shù)標(biāo)準(zhǔn)庫(kù)functools中的函數(shù)reduce()可以將一個(gè)接收2個(gè)參數(shù)的函數(shù)以迭代累積的方式從左到右依次作用到一個(gè)序列或迭代器對(duì)象的所有元素上,并且允許指定一個(gè)初始值。>>>fromfunctoolsimportreduce>>>seq=list(range(1,10))>>>reduce(lambdax,y:x+y,seq)453常用內(nèi)置函數(shù)>>>importoperator#標(biāo)準(zhǔn)庫(kù)operator提供了大量運(yùn)算>>>operator.add(3,5)#可以像普通函數(shù)一樣直接調(diào)用8>>>reduce(operator.add,seq)#使用add運(yùn)算45>>>reduce(operator.mul,seq)#乘法運(yùn)算362880>>>reduce(operator.mul,range(1,6))#5的階乘120>>>reduce(operator.add,map(str,seq))#轉(zhuǎn)換成字符串再累加'123456789'>>>reduce(operator.add,[[1,2],[3]],[])#這個(gè)操作占用空間較大,慎用[1,2,3]3常用內(nèi)置函數(shù)內(nèi)置函數(shù)filter()將一個(gè)單參數(shù)函數(shù)作用到一個(gè)序列上,返回該序列中使得該函數(shù)返回值為T(mén)rue的那些元素組成的filter對(duì)象,如果指定函數(shù)為None,則返回序列中等價(jià)于True的元素。>>>seq=['foo','x41','?!','***']>>>deffunc(x): returnx.isalnum()#測(cè)試是否為字母或數(shù)字>>>filter(func,seq)#返回filter對(duì)象<filterobjectat0x000000000305D898>>>>list(filter(func,seq))#把filter對(duì)象轉(zhuǎn)換為列表['foo','x41']3常用內(nèi)置函數(shù)zip()函數(shù)用來(lái)把多個(gè)可迭代對(duì)象中的元素壓縮到一起,返回一個(gè)可迭代的zip對(duì)象,其中每個(gè)元素都是包含原來(lái)的多個(gè)可迭代對(duì)象對(duì)應(yīng)位置上元素的元組,如同拉拉鏈一樣。>>>list(zip('abcd',[1,2,3]))#壓縮字符串和列表[('a',1),('b',2),('c',3)]>>>list(zip('123','abc',',.!'))#壓縮3個(gè)序列[('1','a',','),('2','b','.'),('3','c','!')]>>>x=zip('abcd','1234')>>>list(x)[('a','1'),('b','2'),('c','3'),('d','4')]3常用內(nèi)置函數(shù)map、filter、enumerate、zip等對(duì)象不僅具有惰性求值的特點(diǎn),還有另外一個(gè)特點(diǎn):訪問(wèn)過(guò)的元素不可再次訪問(wèn)。>>>x=map(str,range(10))>>>list(x)['0','1','2','3','4','5','6','7','8','9']>>>list(x)[]>>>x=map(str,range(10))>>>'2'inxTrue>>>'2'inxFalse>>>'8'inxFalse3常用內(nèi)置函數(shù)3對(duì)象的刪除在Python中具有自動(dòng)內(nèi)存管理功能,Python解釋器會(huì)跟蹤所有的值,一旦發(fā)現(xiàn)某個(gè)值不再有任何變量指向,將會(huì)自動(dòng)刪除該值。顯式釋放自己申請(qǐng)的資源是程序員的好習(xí)慣之一,也是程序員素養(yǎng)的重要體現(xiàn)之一。在Python中,可以使用del命令來(lái)顯式刪除對(duì)象并解除與值之間的指向關(guān)系。刪除對(duì)象時(shí),如果其指向的值還有別的變量指向則不刪除該值,如果刪除對(duì)象后該值不再有其他變量指向,則刪除該值。3對(duì)象的刪除>>>x=[1,2,3,4,5,6]>>>y=3>>>z=y>>>print(y)3>>>dely#刪除對(duì)象>>>print(y)NameError:name'y'isnotdefined>>>print(z)3>>>delz>>>print(z)NameError:name'z'isnotdefined>>>delx[1]#刪除列表中指定元素>>>print(x)[1,3,4,5,6]>>>delx#刪除整個(gè)列表>>>print(x)NameError:name'x'isnotdefined3對(duì)象的刪除del命令無(wú)法刪除元組或字符串中的元素,只可以刪除整個(gè)元組或字符串,因?yàn)檫@兩者均屬于不可變序列。>>>x=(1,2,3)>>>delx[1]Traceback(mostrecentcalllast):File"<pyshell#62>",line1,in<module>delx[1]TypeError:'tuple'objectdoesn'tsupportitemdeletion>>>delx>>>print(x)Traceback(mostrecentcalllast):File"<pyshell#64>",line1,in<module>print(x)NameError:name'x'isnotdefined3基本輸入輸出用Python進(jìn)行程序設(shè)計(jì),輸入是通過(guò)input()函數(shù)來(lái)實(shí)現(xiàn)的,input()的一般格式為:x=input('提示:')該函數(shù)返回輸入的對(duì)象。可輸入數(shù)字、字符串和其它任意類(lèi)型對(duì)象。3基本輸入輸出在Python3.x中,input()函數(shù)用來(lái)接收用戶(hù)的鍵盤(pán)輸入,不論用戶(hù)輸入數(shù)據(jù)時(shí)使用什么界定符,input()函數(shù)的返回結(jié)果都是字符串,需要將其轉(zhuǎn)換為相應(yīng)的類(lèi)型再處理。>>>x=input('Pleaseinput:')Pleaseinput:3>>>print(type(x))<class'str'>>>>x=input('Pleaseinput:')Pleaseinput:'1'>>>print(type(x))<class'str'>>>>x=input('Pleaseinput:')Pleaseinput:[1,2,3]>>>print(type(x))<class'str'>3基本輸入輸出Python3.x中使用print()函數(shù)進(jìn)行輸出。>>>print(3,5,7)357>>>print(3,5,7,sep=',')#指定分隔符3,5,7>>>print(3,5,7,sep=':')3:5:7>>>foriinrange(10,20): print(i,end='')#不換行101112131415161718193基本輸入輸出在Python3.x中則需要使用下面的方法進(jìn)行重定向:>>>fp=open(r'D:\mytest.txt','a+')>>>print('Hello,world!',file=fp)>>>fp.close()或>>>withopen(r'D:\mytest.txt','a+')asfp: print('Hello,world!',file=fp)3模塊導(dǎo)入與使用import模塊名>>>importmath>>>math.sin(0.5)#求0.5的正弦>>>importrandom>>>x=random.random()#獲得[0,1)內(nèi)的隨機(jī)小數(shù)>>>y=random.random()>>>n=random.randint(1,100)#獲得[1,100]上的隨機(jī)整數(shù)可以使用dir()函數(shù)查看任意模塊中所有的對(duì)象列表,如果調(diào)用不帶參數(shù)的dir()函數(shù),則返回當(dāng)前所有名字列表??梢允褂胔elp()函數(shù)查看任意模塊或函數(shù)的使用幫助。3Python快速入門(mén)例1-1:用戶(hù)輸入一個(gè)三位自然數(shù),計(jì)算并輸出其佰位、十位和個(gè)位上的數(shù)字。x=input('請(qǐng)輸入一個(gè)三位數(shù):')x=int(x)a=x//100b=x//10%10c=x%10print(a,b,c)想一想,還有別的辦法嗎?3Python快速入門(mén)還可以這樣寫(xiě)x=input('請(qǐng)輸入一個(gè)三位數(shù):')x=int(x)a,b=divmod(x,100)b,c=divmod(b,10)print(a,b,c)還可以再簡(jiǎn)單些嗎?3Python快速入門(mén)居然可以這樣?OMGx=input('請(qǐng)輸入一個(gè)三位數(shù):')a,b,c=map(int,x)print(a,b,c)3Python快速入門(mén)例1-3:任意輸入三個(gè)英文單詞,按字典順序輸出。s=input('x,y,z=')x,y,z=s.split(',')ifx>y:
x,y=y,xifx>z:x,z=z,xify>z:y,z=z,yprint(x,y,z)或直接寫(xiě)為:s=input('x,y,z=')x,y,z=sorted(s.split(','))print(x,y,z)Python序列概述Python序列類(lèi)似于其他語(yǔ)言中的數(shù)組,但功能要強(qiáng)大很多。Python中常用的序列結(jié)構(gòu)有列表、元組、字符串,字典、集合以及range等對(duì)象也支持很多類(lèi)似的操作。列表、元組、字符串支持雙向索引,第一個(gè)元素下標(biāo)為0,第二個(gè)元素下標(biāo)為1,以此類(lèi)推;最后一個(gè)元素下標(biāo)為-1,倒數(shù)第二個(gè)元素下標(biāo)為-2,以此類(lèi)推。有序序列無(wú)序序列列表元組字符串字典集合range、zip、map、enumerate等可變序列不可變序列Python序列概述
列表元組字典集合類(lèi)型名稱(chēng)listtupledictset定界符方括號(hào)[]圓括號(hào)()大括號(hào){}大括號(hào){}是否可變是否是是是否有序是是否否是否支持下標(biāo)是(使用序號(hào)作為下標(biāo))是(使用序號(hào)作為下標(biāo))是(使用“鍵”作為下標(biāo))否元素分隔符逗號(hào)逗號(hào)逗號(hào)逗號(hào)對(duì)元素形式的要求無(wú)無(wú)鍵:值必須可哈希對(duì)元素值的要求無(wú)無(wú)“鍵”必須可哈希必須可哈希元素是否可重復(fù)是是“鍵”不允許重復(fù),“值”可以重復(fù)否元素查找速度非常慢很慢非??旆浅?煨略龊蛣h除元素速度尾部操作快其他位置慢不允許快快Python序列概述4.1
列表列表是Python中內(nèi)置有序、可變序列,列表的所有元素放在一對(duì)中括號(hào)“[]”中,并使用逗號(hào)分隔開(kāi);當(dāng)列表元素增加或刪除時(shí),列表對(duì)象自動(dòng)進(jìn)行擴(kuò)展或收縮內(nèi)存,保證元素之間沒(méi)有縫隙;在Python中,一個(gè)列表中的數(shù)據(jù)類(lèi)型可以各不相同,可以同時(shí)分別為整數(shù)、實(shí)數(shù)、字符串等基本類(lèi)型,甚至是列表、元組、字典、集合以及其他自定義類(lèi)型的對(duì)象。[10,20,30,40]['crunchyfrog','rambladder','larkvomit']['spam',2.0,5,[10,20]][['file1',200,7],['file2',260,9]]列表常用方法4.1
列表方法說(shuō)明lst.append(x)將元素x添加至列表lst尾部lst.extend(L)將列表L中所有元素添加至列表lst尾部lst.insert(index,x)在列表lst指定位置index處添加元素x,該位置后面的所有元素后移一個(gè)位置lst.remove(x)在列表lst中刪除首次出現(xiàn)的指定元素,該元素之后的所有元素前移一個(gè)位置lst.pop([index])刪除并返回列表lst中下標(biāo)為index(默認(rèn)為-1)的元素lst.clear()刪除列表lst中所有元素,但保留列表對(duì)象lst.index(x)返回列表lst中第一個(gè)值為x的元素的下標(biāo),若不存在值為x的元素則拋出異常lst.count(x)返回指定元素x在列表lst中的出現(xiàn)次數(shù)lst.reverse()對(duì)列表lst所有元素進(jìn)行逆序lst.sort(key=None,reverse=False)對(duì)列表lst中的元素進(jìn)行排序,key用來(lái)指定排序依據(jù),reverse決定升序(False)還是降序(True)lst.copy()返回列表lst的淺復(fù)制4.1.1列表創(chuàng)建與刪除使用“=”直接將一個(gè)列表賦值給變量即可創(chuàng)建列表對(duì)象>>>a_list=['a','b','mpilgrim','z','example']>>>a_list=[]#創(chuàng)建空列表也可以使用list()函數(shù)將元組、range對(duì)象、字符串或其他類(lèi)型的可迭代對(duì)象類(lèi)型的數(shù)據(jù)轉(zhuǎn)換為列表。>>>a_list=list((3,5,7,9,11))>>>a_list[3,5,7,9,11]>>>list(range(1,10,2))[1,3,5,7,9]>>>list('helloworld')['h','e','l','l','o','','w','o','r','l','d']>>>x=list()#創(chuàng)建空列表4.1.1列表創(chuàng)建與刪除當(dāng)不再使用時(shí),使用del命令刪除整個(gè)列表,如果列表對(duì)象所指向的值不再有其他對(duì)象指向,Python將同時(shí)刪除該值。>>>dela_list>>>a_listTraceback(mostrecentcalllast):File"<pyshell#6>",line1,in<module>a_listNameError:name'a_list'isnotdefined4.1.2列表元素的增加(1)可以使用“+”運(yùn)算符將元素添加到列表中。>>>aList=[3,4,5]>>>aList=aList+[7]>>>aList[3,4,5,7]嚴(yán)格意義上來(lái)講,這并不是真的為列表添加元素,而是創(chuàng)建了一個(gè)新列表,并將原列表中的元素和新元素依次復(fù)制到新列表的內(nèi)存空間。由于涉及大量元素的復(fù)制,該操作速度較慢,在涉及大量元素添加時(shí)不建議使用該方法。4.1.2列表元素的增加(2)使用列表對(duì)象的append()方法在當(dāng)前列表尾部追加元素,原地修改列表,是真正意義上的在列表尾部添加元素,速度較快。>>>aList.append(9)>>>aList[3,4,5,7,9]所謂“原地”,是指不改變列表在內(nèi)存中的首地址。4.1.2列表元素的增加Python采用的是基于值的自動(dòng)內(nèi)存管理方式,當(dāng)為對(duì)象修改值時(shí),并不是真的直接修改變量的值,而是使變量指向新的值,這對(duì)于Python所有類(lèi)型的變量都是一樣的。>>>a=[1,2,3]>>>id(a)#返回對(duì)象的內(nèi)存地址20230752>>>a=[1,2]>>>id(a)203382084.1.2列表元素的增加列表中包含的是元素值的引用,而不是直接包含元素值。如果是直接修改序列變量的值,則與Python普通變量的情況是一樣的如果是通過(guò)下標(biāo)來(lái)修改序列中元素的值或通過(guò)可變序列對(duì)象自身提供的方法來(lái)增加和刪除元素時(shí),序列對(duì)象在內(nèi)存中的起始地址是不變的,僅僅是被改變值的元素地址發(fā)生變化,也就是所謂的“原地操作”。4.1.2列表元素的增加>>>a=[1,2,4]>>>b=[1,2,3]>>>a==bFalse>>>id(a)==id(b)False>>>id(a[0])==id(b[0])True>>>a=[1,2,3]>>>id(a)25289752>>>a.append(4)>>>id(a)25289752>>>a.remove(3)>>>a[1,2,4]>>>id(a)25289752>>>a[0]=5>>>a[5,2,4]>>>id(a)252897524.1.2列表元素的增加(3)使用列表對(duì)象的extend()方法可以將另一個(gè)迭代對(duì)象的所有元素添加至該列表對(duì)象尾部。通過(guò)extend()方法來(lái)增加列表元素也不改變其內(nèi)存首地址,屬于原地操作。>>>a.extend([7,8,9])>>>a[5,2,4,7,8,9]>>>id(a)25289752>>>aList.extend([11,13])>>>aList[3,4,5,7,9,11,13]>>>aList.extend((15,17))>>>aList[3,4,5,7,9,11,13,15,17]4.1.2列表元素的增加(4)使用列表對(duì)象的insert()方法將元素添加至列表的指定位置。>>>aList.insert(3,6)#在下標(biāo)為3的位置插入元素6>>>aList[3,4,5,6,7,9,11,13,15,17]4.1.2列表元素的增加應(yīng)盡量從列表尾部進(jìn)行元素的增加與刪除操作。列表的insert()可以在列表的任意位置插入元素,但由于列表的自動(dòng)內(nèi)存管理功能,insert()方法會(huì)引起插入位置之后所有元素的移動(dòng),這會(huì)影響處理速度。類(lèi)似的還有后面介紹的remove()方法以及使用pop()函數(shù)彈出列表非尾部元素和使用del命令刪除列表非尾部元素的情況。4.1.2列表元素的增加importtimedefInsert():a=[]foriinrange(10000):a.insert(0,i)defAppend():a=[]foriinrange(10000):a.append(i)start=time.time()foriinrange(10):Insert()print('Insert:',time.time()-start)start=time.time()foriinrange(10):Append()print('Append:',time.time()-start)左側(cè)代碼運(yùn)行結(jié)果如下:Insert:0.578000068665Append:0.03099989891054.1.2列表元素的增加(5)使用乘法來(lái)擴(kuò)展列表對(duì)象,將列表與整數(shù)相乘,生成一個(gè)新列表,新列表是原列表中元素的重復(fù)。>>>aList=[3,5,7]>>>bList=aList>>>id(aList)57091464>>>id(bList)57091464>>>aList=aList*3>>>aLi
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- YC/T 616-2024殘次煙判定及處理規(guī)范
- 醫(yī)院住院樓混凝土施工承包合同
- 生態(tài)農(nóng)業(yè)管理創(chuàng)新技巧
- 企業(yè)資金管理辦法:資金結(jié)構(gòu)調(diào)整
- 鋼鐵冶煉工程招投標(biāo)實(shí)施策略
- 2024年鏟車(chē)節(jié)能減排協(xié)議3篇
- 2024展廳裝飾裝修承包合同(含展品保管與維護(hù))3篇
- 2024年度趙苑離婚協(xié)議中子女探望權(quán)及監(jiān)護(hù)權(quán)協(xié)議書(shū)3篇
- 社會(huì)工作教師聘用協(xié)議
- 施工協(xié)議書(shū)與材料質(zhì)量
- 期末測(cè)試卷(一)2024-2025學(xué)年 人教版PEP英語(yǔ)五年級(jí)上冊(cè)(含答案含聽(tīng)力原文無(wú)聽(tīng)力音頻)
- 2023-2024學(xué)年廣東省深圳市南山區(qū)八年級(jí)(上)期末英語(yǔ)試卷
- 期末 (試題) -2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
- 漢服娃衣創(chuàng)意設(shè)計(jì)與制作智慧樹(shù)知到期末考試答案章節(jié)答案2024年四川文化產(chǎn)業(yè)職業(yè)學(xué)院
- 《大數(shù)據(jù)技術(shù)原理與應(yīng)用(第3版)》期末復(fù)習(xí)題庫(kù)(含答案)
- 廣東省中山市2023-2024學(xué)年四年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- 8款-組織架構(gòu)圖(可編輯)
- 海螺牌水泥質(zhì)量檢驗(yàn)報(bào)告28天報(bào)告425加章2015
- 云南省教育科學(xué)規(guī)劃課題開(kāi)題報(bào)告 - 云南省教育科學(xué)研究院
- 二年級(jí)上,數(shù)學(xué),3個(gè)兩位數(shù)加減,80題,(豎式計(jì)算)
- 人民法院涉訴信訪案件終結(jié)辦法
評(píng)論
0/150
提交評(píng)論