Python基礎(chǔ)語(yǔ)法_第1頁(yè)
Python基礎(chǔ)語(yǔ)法_第2頁(yè)
Python基礎(chǔ)語(yǔ)法_第3頁(yè)
Python基礎(chǔ)語(yǔ)法_第4頁(yè)
Python基礎(chǔ)語(yǔ)法_第5頁(yè)
已閱讀5頁(yè),還剩23頁(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)介

1、Python的特點(diǎn)1. 簡(jiǎn)單Python是一種代表簡(jiǎn)單思想的語(yǔ)言。2. 易學(xué)Python有極其簡(jiǎn)單的語(yǔ)法。3. 免費(fèi)、開(kāi)源Python是FLOSS (自由/開(kāi)放源碼軟件)之一。4. 咼層語(yǔ)言使用Python編寫程序時(shí)無(wú)需考慮如何管理程序使用的內(nèi)存一類的底層細(xì)節(jié)。5. 可移植性Python 已被移植到很多平臺(tái),這些平臺(tái)包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/39O、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Shar

2、p Zaurus、Windows CE 甚至還有 PocketPC。6. 解釋性可以直接從源代碼運(yùn)行。在計(jì)算機(jī)內(nèi)部,python解釋器把源代碼轉(zhuǎn)換為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語(yǔ)言。7. 面向?qū)ο驪ython既支持面向過(guò)程編程也支持面向?qū)ο缶幊獭?. 可擴(kuò)展性部分程序可以使用其他語(yǔ)言編寫,如C/C+。9. 可嵌入型可以把Python嵌入到c/c+程序中,從而提供腳本功能。10. 豐富的庫(kù)Python標(biāo)準(zhǔn)庫(kù)確實(shí)很龐大。它可以幫助你處理各種工作,包括正則表達(dá)式、文檔生成、單元測(cè)試、線程、數(shù)據(jù)庫(kù)、網(wǎng)頁(yè)瀏覽器、CGI、FTP、操作。電子郵件、XML、XML-RPC、HTML、WA

3、V文件、密碼系統(tǒng)、 GUI (圖形用戶界面)、 Tk和其他與系統(tǒng)有關(guān)的- 分割線- 以下是 Python的基本語(yǔ)法 -、基本概念1. python中數(shù)有四種類型:整數(shù)、長(zhǎng)整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)。整數(shù),如1長(zhǎng)整數(shù) 是比較大的整數(shù)浮點(diǎn)數(shù)女口 1.23、3E-2復(fù)數(shù) 女口 1 + 2j、 1.1 + 2.2j2. 字符串(字符的序列)python中單引號(hào)和雙引號(hào)使用完全相同。使用三引號(hào)(”或”)可以指定一個(gè)多行字符串。轉(zhuǎn)義符自然字符串,通過(guò)在字符串前加r或R。如rthis is a line with n則n會(huì)顯示,并不是換行。pytho n 允許處理 un icode 字符串,加前綴 u 或 U ,女

4、口this is an uni code stri ng。字符串是不可變的。按字面意義級(jí)聯(lián)字符串,如this is string會(huì)被自動(dòng)轉(zhuǎn)換為this is string。3. 標(biāo)識(shí)符的命名第一個(gè)字符必須是字母表中字母或下劃線_。標(biāo)識(shí)符的其他的部分有字母、數(shù)字和下劃線組成。標(biāo)識(shí)符對(duì)大小寫敏感。4. 對(duì)象python程序中用到的任何“東西”都成為“對(duì)象”。5. 邏輯行和物理行物理行是我們?cè)诰帉懗绦驎r(shí)看到的,邏輯行則是python看到的。python中分號(hào);標(biāo)識(shí)一個(gè)邏輯行的結(jié)束,但是實(shí)際中一般每個(gè)物理行只寫一個(gè)邏輯行,可以避免使用分號(hào)。 多個(gè)物理行中可以寫一個(gè)邏輯行,如下:s = peter is

5、 writi ng this article上面 的使用被稱為明確的行連接,又如:print peter6.縮進(jìn)空白在python是非常重要的,行首的空白是最重要的,又稱為縮進(jìn)。行首的空白(空格和制表符)用來(lái)決定操作。邏輯行的縮進(jìn)層次,從而決定語(yǔ)句分組。這意味著同一層次的語(yǔ)句必須有相同的縮進(jìn),每一組這樣的語(yǔ)句稱為一個(gè)塊。注意:不要混合使用空格和制表符來(lái)縮進(jìn),因?yàn)樵诳缭讲煌钠脚_(tái)時(shí)無(wú)法正常工作。二、運(yùn)算符與表達(dá)式1.運(yùn)算符與其用法運(yùn)算符名稱 說(shuō)明 例子+ 力口 兩個(gè)對(duì)象相加3 + 5得到8。a + b得至U ab。- 減 得到負(fù)數(shù)或是一個(gè)數(shù)減去另一個(gè)數(shù)-5.2得到一個(gè)負(fù)數(shù)。50 - 24得到26

6、。* 乘 兩個(gè)數(shù)相乘或是返回一個(gè)被重復(fù)若干次的字符串2 * 3得到6。la * 3得到lalala。冪返回x的y次幕3 * 4 得至U 81 (即 3 * 3 * 3 * 3 )/ 除 x除以y 4/3得到1 (整數(shù)的除法得到整數(shù)結(jié)果)。4.0/3或4/3.0得到1.3333333333333333/ 取整除返回商的整數(shù)部分4 / 3.0得到1.0% 取模返回除法的余數(shù)8%3得到2。-25.5%2.25得到1.5左移把一個(gè)數(shù)的比特向左移一定數(shù)目(每個(gè)數(shù)在內(nèi)存中都表示為比特或二進(jìn)制數(shù)字,即0和1) 2 右移把一個(gè)數(shù)的比特向右移一定數(shù)目11 1得到5。一一 11按比特表示為1011,向右移動(dòng)1比特

7、后得到101,即十進(jìn)制的5。& 按位與數(shù)的按位與 5 & 3得到1。| 按位或 數(shù)的按位或 5 | 3得到7。A按位異或數(shù)的按位異或5A 3得到6按位翻轉(zhuǎn)x的按位翻轉(zhuǎn)是-(x+1) 5得到6。 小于 返回x是否小于y。所有比較運(yùn)算符返回 1表示真,返回0表示假。這分別與特殊的變量 True和False 等價(jià)。注意,這些變量名的大寫。5 3返回0 (即False)而3 5返回1 (即True)。比較可以被任意連接: 3 5 大于 返回x是否大于y 5 3返回True。如果兩個(gè)操作數(shù)都是數(shù)字,它們首先被轉(zhuǎn)換為一個(gè)共同的類型。否則,它總是返回False。= 小于等于返回x是否小于等于 y x = 3

8、; y = 6; x = 大于等于返回x是否大于等于 y x = 4; y = 3; x = y 返回 True。= 等于比較對(duì)象是否相等x = 2; y = 2; x = y 返回 True。x = str; y = stR; x = y 返回 False。x = str; y = str;x = y 返回 True。!= 不等于比較兩個(gè)對(duì)象是否不相等x = 2; y = 3; x != y返回True。not布爾非” 如果x為True,返回False。如果x為False,它返回 True。x = True; not y返回False。and布爾與” 如果x為False, x and y返回

9、False,否則它返回 y的計(jì)算值。x = False; y = True; x and y,由于x是False,返回False。在這里,Python不會(huì)計(jì)算y,因?yàn)樗肋@個(gè)表達(dá)式的值肯定是False (因?yàn)閤是False)。這個(gè)現(xiàn)象稱為短路計(jì)算。or 布爾或” 如果x是True,它返回True,否則它返回y的計(jì)算值。x = True; y = False; x or y 返回True。短路計(jì)算在這里也適用。2.運(yùn)算符優(yōu)先級(jí)(從低到高)運(yùn)算符描述lambda Lambda 表達(dá)式or布爾“或”and布爾“與”pass是空語(yǔ)句。not x 布爾非”in, not in 成員測(cè)試 is, is

10、not同一性測(cè)試 ,=,!=,= 比較| 按位或A 按位異或& 按位與 移位+,-加法與減法*,/,%乘法、除法與取余+x, -x 正負(fù)號(hào)x按位翻轉(zhuǎn)* 指數(shù)x.attribute 屬性參考xi ndex下標(biāo)xindex:index尋址段 f(argume nts.)函數(shù)調(diào)用(experessi on,.)綁定或元組顯示expressi on,列 表顯示 key:datum,.字典顯示expressi on,字符串轉(zhuǎn)換3. python控制臺(tái)輸出使用printprint abc#打印abc并換行print abc%s % d#打印 abcdprint abc%sef%s % (d, g)#打印

11、abcdefg三、控制流1.if語(yǔ)句 i = 10n = in t(raw_i nput(e nter a nu mber:)if n = i:prin t equalelif n %s % (key, value)#1 - one#2 - twodiet函數(shù)如下:clear()-刪除字典中所有元素di = 1:o ne, 2:twod1.clear()print di # copy()-返回字典的一個(gè)副本(淺復(fù)制)di = 1:o ne, 2:twod2 = d1.copy()print d2 #1: o ne, 2: twodict.fromkeys(seq,val=None)-創(chuàng)建并返回

12、一個(gè)新字典,以序列 seq中元素做字典的鍵,的初始值(默認(rèn)為None)I = 1,2, 3t = (1,2, 3)d3 = .fromkeys(l)print d3 #1: None, 2: No ne, 3: Noned4 = .fromkeys(t, default)print d4 #1: default, 2: default, 3: defaultget(key,default) -返回字典dict中鍵key對(duì)應(yīng)值,如果字典中不存在此鍵,則返回 默認(rèn)值為None)d5 = 1:o ne, 2:two, 3:threeprint d5.get(1) #oneprint d5.get(5

13、) #No neprint d5.get(5, test) #testhas_key(key) -判斷字典中是否有鍵 keyd6 = 1:o ne, 2:two, 3:threeprint d6.has_key(1)#Trueprint d6.has_key(5)#Falseitems()-返回一個(gè)包含字典中(鍵,值)對(duì)元組的列表d7 = 1:o ne, 2:two, 3:threefor item in d7.items(): print item#(1, on e)#(2, two)#(3, three) for key, value in d7.items():prin t %s - %

14、s % (key, value)#1 - one #2 - two#3 - threekeys()-返回一個(gè)包含字典中所有鍵的列表d8 = 1:o ne, 2:two, 3:threefor key in d8.keys(): print key#1#2#3values。-返回一個(gè)包含字典中所有值的列表d8 = 1:o ne, 2:two, 3:threefor value in d8.values():print value#one#two#threepop(key, default)-若字典中key鍵存在,刪除并返回dictkey,若不存在,且未給出default值,引發(fā)KeyError

15、異常d9 = 1:o ne, 2:two, 3:three print d9.pop(1) #one print d9 #2: two, 3: threeprint d9.pop(5, No ne) #None try:d9.pop(5)# raise KeyErrorexcept KeyError, ke:print KeyError:, ke #KeyError:5popitem()-刪除任意鍵值對(duì),并返回該鍵值對(duì),如果字典為空,則產(chǎn)生異常KeyErrord10 = 1:o ne, 2:two, 3:threeprint d10.popitem()#(1, on e)print d10#2

16、: two, 3: threesetdefault(key,default) -若字典中有 key,則返回vlaue值,若沒(méi)有 key,則加上該 key,值為default,默 認(rèn) None d = 1:o ne, 2:two, 3:threeprint d.setdefault(1)#oneprint d.setdefault (5)#No neprint d #1: o ne, 2: two, 3: three, 5: Noneprint d.setdefault(6, six) #sixprint d #1: o ne, 2: two, 3: three, 5: None, 6: six

17、update(dict2)-把dict2的元素加入到dict中去,鍵字重復(fù)時(shí)會(huì)覆蓋dict中的鍵值d = 1:o ne, 2:two, 3:threed2 = 1:first, 4:forthd.update(d2)print d #1: first, 2: two, 3: three, 4: forthviewitems()-返回一個(gè)view對(duì)象,(key, value)pair的列表,類似于視圖。優(yōu)點(diǎn)是,如果字典發(fā)生變化,view會(huì)同步發(fā)生變化。在迭代過(guò)程中,字典不允許改變,否則會(huì)報(bào)異常d = 1:o ne, 2:two, 3:threefor key, value in d.viewit

18、ems():prin t %s - %s % (key, value)#1 - one#2 - two#3 - threeviewkeys()-返回一個(gè) view對(duì)象,key的列表d = 1:o ne, 2:two, 3:threefor key in d.viewkeys():print key#1#2#3viewvalues()-返回一個(gè) view 對(duì)象,value 的列表d = 1:o ne, 2:two, 3:threefor value in d.viewvalues():print value #one#two#three4. 序列序列類型是指容器內(nèi)的元素從0開(kāi)始的索引順序訪問(wèn),一

19、次可以訪問(wèn)一個(gè)或者多個(gè)元素;列表、元組和字符串都是序列;序列的兩個(gè)主要特點(diǎn)是索引操作符和切片操作符;索引可以得到特定元素;切片可以得到部分序列;1 nu mbers = zero, on e, two, three, four22 print nu mbers1 # one3 print nu mbers-1 # four4 #pri nt nu mbers5 # raise In dexError65 print nu mbers: # zero, on e, two, three, four6 print numbers3: # three, four7 print nu mbers:2

20、# zero, on e8print numbers2:4 # two, three9print numbers1:-1 # o ne, two, three切片操作符中的第一個(gè)數(shù)(冒號(hào)之前)表示切片開(kāi)始的位置,第二個(gè)數(shù)(冒號(hào)之后)表示切片到哪里結(jié)束。如果不指定第一個(gè)數(shù),Python就從序列首開(kāi)始。如果沒(méi)有指定第二個(gè)數(shù),則Python會(huì)停止在序列尾。注意,返回的序列從開(kāi)始位置開(kāi)始,剛好在結(jié)束位置之前結(jié)束。即開(kāi)始位置是包含在序列切片中的,而結(jié)束位置被排斥在切片外??梢杂秘?fù)數(shù)做切片。負(fù)數(shù)用在從序列尾開(kāi)始計(jì)算的位置。5. 綁定當(dāng)創(chuàng)建一個(gè)對(duì)象并給它賦一個(gè)變量的時(shí)候,這個(gè)變量?jī)H僅“指向”那個(gè)對(duì)象,而不是

21、表示這個(gè)對(duì)象本身!也就是說(shuō),變量名指向計(jì)算機(jī)中存儲(chǔ)那個(gè)對(duì)象的內(nèi)存,這被稱作名稱到對(duì)象的綁定。如果要復(fù)制一個(gè)列表或者類似的序列或者其他復(fù)雜的對(duì)象(不是如整數(shù)那樣的簡(jiǎn)單對(duì)象),那么必須使用切片操作符來(lái)取得拷貝。七、面向?qū)ο缶幊蘰ython支持面向?qū)ο缶幊?;類和?duì)象是面向?qū)ο缶幊痰膬蓚€(gè)主要方面,類創(chuàng)建一個(gè)新的類型,對(duì)象是這個(gè)類的實(shí) 例。對(duì)象可以使用普通的屬于對(duì)象的變量存儲(chǔ)數(shù)據(jù),屬于對(duì)象或類的變量被稱為域;對(duì)象也可以使用屬于類的函數(shù), 這樣的函數(shù)稱為類的方法;域和方法可以合稱為類的屬性。域有兩種類型-屬于實(shí)例的或?qū)儆陬惐旧?;它們分別被稱為實(shí)例變量和類變量。類使用關(guān)鍵字class創(chuàng)建,類的域和方法被列在

22、一個(gè)縮進(jìn)塊中。類的方法必須有一個(gè)額外的第一個(gè)參數(shù),但是在調(diào)用時(shí)不為這個(gè)參數(shù)賦值,這個(gè)特殊變量指對(duì)象本身,按照慣例 它的名稱是self,類似C#中的this。class Ani mal:pass #empty block_i nit_方法在類的一個(gè)對(duì)象被創(chuàng)建時(shí)調(diào)用該方法;相當(dāng)于 C+中的構(gòu)造函數(shù)。_de方法在類的對(duì)象被銷毀時(shí)調(diào)用該方法;相當(dāng)于C+中的析構(gòu)函數(shù)。在使用del刪除一個(gè)對(duì)象時(shí)也就調(diào)用_del_ 方法。Python中所有的類成員(包括數(shù)據(jù)成員)都是public的;只有一個(gè)例外,如果使用的數(shù)據(jù)成員以雙下劃線為前綴,則為私有變量。class Pers on:Cou nt = 0def _in

23、it_(self, n ame, age):Pers on.Count += 1self. name = n ameself._age = agep = Perso n(peter, 25)p1 = Perso n(joh n, 20)print Pers on .Co unt #2print p.n ame #peterprint p._age #AttributeError: Pers on in sta nee has no attribute _age繼承:為了使用繼承,基類的名稱作為一個(gè)元組跟在類名稱的后面;python支持多重繼承。下面是一個(gè)關(guān)于繼承的例子:1 class Scho

24、olMember:2Represe nt any school member.3def _init_(self, n ame, age):4self. name = n ame5self.age = age6prin t I nitializ ing a school member.77def tell(self):8Tell my details9prin t Name: %s, Age: %s, % (self. name, self.age),1110 class Teacher(SchoolMember):11Represe nt a teacher.12def _init_(self

25、, n ame, age, salary):13SchoolMember._init_(self, n ame, age)14self.salary = salary15prin t I nitializ ing a teacher1816def tell(self):17SchoolMember.tell(self)18prin t Salary: %d % self.salary2219 class Stude nt(SchoolMember):20Represe nt a stude nt.21def _init_(self, n ame, age, marks):22SchoolMem

26、ber._init_(self, n ame, age)23self.marks = marks24prin t I nitializ ing a stude nt2925def tell(self):26SchoolMember.tell(self)27prin t Marks: %d % self.marks3328 print SchoolMember._doc_29 print Teacher._doc_30 print Student._doc_3731 t = Teacher(Mr. Li, 30, 9000)32 s = Stude nt(Peter, 25, 90)4033 m

27、embers = t, s4234 for m in members:35m.tell()程序輸出如下:Represe nt any school member.Represe nt a teacher.Represe nt a stude nt.In itializ ing a school member.In itializ ing a teacherIn itializ ing a school member.In itializ ing a stude ntName: Mr. Li, Age: 30, Salary: 9000Name: Peter, Age: 25, Marks: 9

28、0八、輸入/輸出程序與用戶的交互需要使用輸入/輸出,主要包括控制臺(tái)和文件;對(duì)于控制臺(tái)可以使用raw_input和print,也可使用str類。raw_input(xxx)輸入xxx然后讀取用戶的輸入并返回。1.文件輸入/輸出可以使用file類打開(kāi)一個(gè)文件,使用file的read、readline和write來(lái)恰當(dāng)?shù)淖x寫文件。 對(duì)文件讀寫能力取決于打開(kāi)文件時(shí)使用的模式,常用模式有讀模式(門、寫模式(W)、追加模式(a),文件操作之后需要調(diào)用close方法來(lái)關(guān)閉文件。1 test = ”2 This is a program about file I/O.33 Author: Peter Zhan

29、ge4 Date: 2011/12/255 ”76 f = file(test.txt, w) # ope n for writ ing, the file will be created if the file does nt exist7 f.write(test) # write text to file8f.close() # close the file119f = file(test.txt) # if no mode is specified, the default mode is reado nly.1310 while True:11line = f.readli ne()

30、12if len (li ne) = 0:# zero len gth in dicates the EOF of the file13break14prin t li ne,1915 f.close()2.存儲(chǔ)器python提供一個(gè)標(biāo)準(zhǔn)的模塊,成為pickle,使用它可以在一個(gè)文件中存儲(chǔ)任何python對(duì)象,之后可以完整的取出來(lái),這被稱為持久地存儲(chǔ)對(duì)象;還有另外一個(gè)模塊成為cPickle,它的功能和pickle完全一樣,只不過(guò)它是用c寫的,要比pickle速度快(大約快1000 倍)。import cPickledatafile = data.datan amelist = peter, j

31、oh n, k in gf = file(datafile, w)cPickle.dump( namelist, f)f.close()del n amelistf = file(datafile)stored namelist = cPickle .lo ad(f) print stored namelist #peter, john, ki ng九、異常當(dāng)程序中出現(xiàn)某些異常的狀況時(shí),異常就發(fā)生了。python中可以使用try . except處理。try:print 1/0except ZeroDivisi on Error, e:print eexcept:prin t error or

32、 excepti on occurred.#in teger divisio n or modulo by zero可以讓try . except關(guān)聯(lián)上一個(gè)else,當(dāng)沒(méi)有異常時(shí)則執(zhí)行else。我們可以定義自己的異常類,需要繼承Error或Exception。class Shortin putExceptio n( Excepti on): A user-defi ned excepti on class def _init_(self, le ngth, atleast): Exception._init_(self) selfen gth = len gth self.atleast =

33、atleast try:s = raw_in put(e nter somet in g-)if len (s) 3:raise Short in putExcepti on (le n( s), 3)except EOFError:prin t why you in put an EOF?except Short in putExcepti on, ex:prin t The len ght of in put is %d, was expect ing at the least %d % (ex .len gth, ex.atleast) else:print no excepti on#

34、The len ght of in put is 1, was expect ing at the least 3try.fi nallytry:f = file(test.txt)while True:li ne = f.readli ne()if len (I ine) = 0:breaktime.sleep(2)print line,fin ally:f.close()prin t Clea ning up.十、Python標(biāo)準(zhǔn)庫(kù)Python標(biāo)準(zhǔn)庫(kù)是隨Pthon附帶安裝的,包含了大量極其有用的模塊。1. sys模塊sys模塊包含系統(tǒng)對(duì)應(yīng)的功能sys.argv-包含命令行參數(shù),第一個(gè)參數(shù)是

35、 py的文件名sys.platform-返回平臺(tái)類型sys.exit(status) -退出程序,可選的status(范圍:0-127): 0表示正常退出,其他表示不正常,可拋異常事件供捕獲sys.path-程序中導(dǎo)入模塊對(duì)應(yīng)的文件必須放在sys.path包含的目錄中,使用sys.path.append添加自己的模塊路徑sys.modules -This is a dictio nary that maps module n ames to modules which have already bee n loadedsys.stdin,sys.stdout,sys.stderr-包含與標(biāo)準(zhǔn)

36、I/O 流對(duì)應(yīng)的流對(duì)象s = sys.std in. readli ne()sys.stdout.write(s)2. os模塊該模塊包含普遍的操作系統(tǒng)功能字符串指示你正在使用的平臺(tái)。比如對(duì)于Windows,它是nt,而對(duì)于Linux/Unix用戶,它是posixos.getcwd()函數(shù)得到當(dāng)前工作目錄,即當(dāng)前 Python腳本工作的目錄路徑os.getenv()和os.putenv()函數(shù)分別用來(lái)讀取和設(shè)置環(huán)境變量os.listdir()返回指定目錄下的所有文件和目錄名os.remove()函數(shù)用來(lái)刪除一個(gè)文件os.system()函數(shù)用來(lái)運(yùn)行shell命令os.linese

37、p字符串給出當(dāng)前平臺(tái)使用的行終止符。例如,Windows使用rn, Linux使用n而Mac使用ros.sep操作系統(tǒng)特定的路徑分割符os.path.split()函數(shù)返回一個(gè)路徑的目錄名和文件名os.path.isfile()和os.path.isdir()函數(shù)分別檢驗(yàn)給出的路徑是一個(gè)文件還是目錄os.path.existe ()函數(shù)用來(lái)檢驗(yàn)給出的路徑是否真地存在十一、其他1. 一些特殊的方法名稱 說(shuō)明_ini t_(self,.)這個(gè)方法在新建對(duì)象恰好要被返回使用之前被調(diào)用。_de(self)恰好在對(duì)象要被刪除之前調(diào)用。_str_(self)在我們對(duì)對(duì)象使用print語(yǔ)句或是使用str()

38、的時(shí)候調(diào)用。t_(self,other)當(dāng)使用 小于運(yùn)算符( 等等)都有特殊的方法。_getitem_(self,key)使用xkey索引操作符的時(shí)候調(diào)用。_len_(self)對(duì)序列對(duì)象使用內(nèi)建的len()函數(shù)的時(shí)候調(diào)用。下面的類中定義了上表中的方法:class Array:list =def _init_(self):prin t c on structordef _del_(self):prin t destructordef _str_(self):return this self-defi ned array classdef _getitem_(self, key): return

39、 self._listkeydef _len_(self):return len(self._list)def Add(self, value):self._list.appe nd(value)def Remove(self, in dex): del self._listi ndexdef DisplayItems(self): prin t show all items- for item in self._list: print itemarr = Array()#con structorprint arr#this self-defi ned array classprin t le

40、 n(arr)#0arr.Add(1)arr.Add(2)arr.Add(3)prin t le n(arr)#3print arr0 #1 arr.Displayltems() #show all items #1 #2#3arr.Remove(1)arr.DisplayItems()#show all items#1#3#destructor2.綜合列表通過(guò)列表綜合,可以從一個(gè)已有的列表導(dǎo)出一個(gè)新的列表。listl = 1,2, 3, 4, 5Iist2 = i*2 for i in listl if i 3prin t listl#1,2, 3, 4, 5prin t Iist2 #8,

41、 103.函數(shù)接收元組/列表/字典Python 表當(dāng)函數(shù)接收元組或字典形式的參數(shù)的時(shí)候,有一種特殊的方法,使用*和*前綴。該方法在函數(shù)需要獲取可變數(shù)量的參數(shù)的時(shí)候特別有用。由于在args變量前有*前綴,所有多余的函數(shù)參數(shù)都會(huì)作為一個(gè)元組存儲(chǔ)在args中。如果使用的是*前綴,多余的參數(shù)則會(huì)被認(rèn)為是一個(gè)字典的鍵/值對(duì)。def powersum(power, *args):total = 0for i in args:total += pow(i, power)return totalprint powersum(2, 1,2, 3)#14 def displaydic(*args):for key

42、,value in args.items():prin t key:%s;value:%s % (key, value)displaydic(a=on e, b=two, c=three)#key:a;value: one#key:c;value:three#key:b;value:two4. lambdalambda語(yǔ)句被用來(lái)創(chuàng)建新的函數(shù)對(duì)象,并在運(yùn)行時(shí)返回它們。lambda需要一個(gè)參數(shù),后面僅跟單個(gè)表達(dá)式作為函數(shù)體,而表達(dá)式的值被這個(gè)新建的函數(shù)返回。注意,即便是print語(yǔ)句也不能用在lambda形式中,只能使用表達(dá)式。func = lambda s: s * 3print fun c(p

43、eter )#peter peter peter func2 = lambda a, b: a * bprint fun c2(2, 3)#65. exec/evalexec語(yǔ)句用來(lái)執(zhí)行儲(chǔ)存在字符串或文件中的Python語(yǔ)句;eval語(yǔ)句用來(lái)計(jì)算存儲(chǔ)在字符串中的有效達(dá)式。cmd = pri nt hello worldexec cmd #hello worldexpression = 10 * 2 + 5print eval(expressi on)#256. assertassert語(yǔ)句用來(lái)斷言某個(gè)條件是真的,并且在它非真的時(shí)候引發(fā)一個(gè)錯(cuò)誤-AssertionError。flag = Tru

44、eassert flag = Truetry:assert flag = Falseexcept Assertion Error, err:prin t failedelse:prin t pass7. repr函數(shù)repr函數(shù)用來(lái)取得對(duì)象的規(guī)范字符串表示。反引號(hào)(也稱轉(zhuǎn)換符)可以完成相同的功能。注意,在大多數(shù)時(shí)候有 eval(repr(object) = object??梢酝ㄟ^(guò)定義類的_repr_方法來(lái)控制對(duì)象在被repr函數(shù)調(diào)用的時(shí)候返回的內(nèi)容。arr = 1,2, 3print arr #1,2, 3print repr(arr) #1,2, 3十二、練習(xí)實(shí)現(xiàn)一個(gè)通訊錄,主要功能:添加、

45、刪除、更新、查詢、顯示全部聯(lián)系人。1 import cPickle2 import os3 import sys44 class Con tact:5def _init_(self, n ame, phone, mail):6self. name = n ame101112131415self.ph one = phoneself.mail = maildef Update(self, n ame, phone, mail): self. name = n ame self.ph one = phone self.mail = mail1617def display(self):print n

46、 ame:%s, phon e:%s, mail:%s % (self. name, self.ph one, self.mail)181920 # begin2121 # file to store con tact data22 data = os.getcwd() + os.sep + con tacts.data2423 while True:24print -25operati on = raw_ in put(i nput your operati on( add/delete/modify/search/all/exit):)2826if operati on = exit:27sys.exit()3128if os.path.exists(data):29if os.path.getsize(data) = 0:30con tacts = 31else:32f = file(data)33con tacts= cPickle.load(f)34f.close()35else:36con tacts = 4137if

溫馨提示

  • 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)論