Python-基礎(chǔ)語法講解_第1頁
Python-基礎(chǔ)語法講解_第2頁
Python-基礎(chǔ)語法講解_第3頁
Python-基礎(chǔ)語法講解_第4頁
Python-基礎(chǔ)語法講解_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

..Python的特點(diǎn)1.簡(jiǎn)單Python是一種代表簡(jiǎn)單思想的語言。2.易學(xué)Python有極其簡(jiǎn)單的語法。3.免費(fèi)、開源Python是FLOSS〔自由/開放源碼軟件之一。4.高層語言使用Python編寫程序時(shí)無需考慮如何管理程序使用的內(nèi)存一類的底層細(xì)節(jié)。5.可移植性Python已被移植到很多平臺(tái),這些平臺(tái)包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、PalmOS、QNX、VMS、Psion、AcomRISCOS、VxWorks、PlayStation、SharpZaurus、WindowsCE甚至還有PocketPC。6.解釋性可以直接從源代碼運(yùn)行。在計(jì)算機(jī)內(nèi)部,python解釋器把源代碼轉(zhuǎn)換為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語言。7.面向?qū)ο驪ython既支持面向過程編程也支持面向?qū)ο缶幊獭?.可擴(kuò)展性部分程序可以使用其他語言編寫,如c/c++。9.可嵌入型可以把Python嵌入到c/c++程序中,從而提供腳本功能。10.豐富的庫Python標(biāo)準(zhǔn)庫確實(shí)很龐大。它可以幫助你處理各種工作,包括正則表達(dá)式、文檔生成、單元測(cè)試、線程、數(shù)據(jù)庫、網(wǎng)頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI〔圖形用戶界面、Tk和其他與系統(tǒng)有關(guān)的操作。---------------分割線------------------------以下是Python的基本語法---------------------------------------------------------一、基本概念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)義符'\'自然字符串,通過在字符串前加r或R。如r"thisisalinewith\n"則\n會(huì)顯示,并不是換行。python允許處理unicode字符串,加前綴u或U,如u"thisisanunicodestring"。字符串是不可變的。按字面意義級(jí)聯(lián)字符串,如"this""is""string"會(huì)被自動(dòng)轉(zhuǎn)換為thisisstring。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="peteris\writingthisarticle"上面\的使用被稱為‘明確的行連接’,又如:print\"peter"6.縮進(jìn)空白在python是非常重要的,行首的空白是最重要的,又稱為縮進(jìn)。行首的空白〔空格和制表符用來決定邏輯行的縮進(jìn)層次,從而決定語句分組。這意味著同一層次的語句必須有相同的縮進(jìn),每一組這樣的語句稱為一個(gè)塊。注意:不要混合使用空格和制表符來縮進(jìn),因?yàn)樵诳缭讲煌钠脚_(tái)時(shí)無法正常工作。二、運(yùn)算符與表達(dá)式1.運(yùn)算符與其用法運(yùn)算符 名稱 說明 例子+ 加 兩個(gè)對(duì)象相加 3+5得到8。'a'+'b'得到'ab'。- 減 得到負(fù)數(shù)或是一個(gè)數(shù)減去另一個(gè)數(shù) -5.2得到一個(gè)負(fù)數(shù)。50-24得到26。* 乘 兩個(gè)數(shù)相乘或是返回一個(gè)被重復(fù)若干次的字符串 2*3得到6。'la'*3得到'lalala'。** 冪 返回x的y次冪3**4得到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<<2得到8?!?按比特表示為10>> 右移 把一個(gè)數(shù)的比特向右移一定數(shù)目 11>>1得到5。——11按比特表示為1011,向右移動(dòng)1比特后得到101,即十進(jìn)制的5。& 按位與 數(shù)的按位與 5&3得到1。| 按位或 數(shù)的按位或 5|3得到7。^ 按位異或 數(shù)的按位異或 5^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<7返回True。> 大于 返回x是否大于y 5>3返回True。如果兩個(gè)操作數(shù)都是數(shù)字,它們首先被轉(zhuǎn)換為一個(gè)共同的類型。否則,它總是返回False。<= 小于等于 返回x是否小于等于y x=3;y=6;x<=y返回True。>= 大于等于 返回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;noty返回False。and 布爾"與" 如果x為False,xandy返回False,否則它返回y的計(jì)算值。 x=False;y=True;xandy,由于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;xory返回True。短路計(jì)算在這里也適用。2.運(yùn)算符優(yōu)先級(jí)〔從低到高運(yùn)算符 描述lambda Lambda表達(dá)式or 布爾"或"and 布爾"與"notx 布爾"非"in,notin 成員測(cè)試is,isnot 同一性測(cè)試<,<=,>,>=,!=,== 比較| 按位或^ 按位異或& 按位與<<,>> 移位+,- 加法與減法*,/,% 乘法、除法與取余+x,-x 正負(fù)號(hào)~x 按位翻轉(zhuǎn)** 指數(shù)x.attribute 屬性參考x[index] 下標(biāo)x[index:index] 尋址段f<arguments...> 函數(shù)調(diào)用<experession,...> 綁定或元組顯示[expression,...] 列表顯示{key:datum,...} 字典顯示'expression,...' 字符串轉(zhuǎn)換3.python控制臺(tái)輸出使用printprint"abc"#打印abc并換行print"abc%s"%"d"#打印abcdprint"abc%sef%s"%<"d","g">#打印abcdefg三、控制流1.if語句i=10n=int<raw_input<"enteranumber:">>ifn==i:print"equal"elifn<i:print"lower"else:print"higher"2.while語句whileTrue:passelse:pass#else語句可選,當(dāng)while為False時(shí),else語句被執(zhí)行。pass是空語句。3.for循環(huán)riinrange<0,5>:printielse:pass#打印0到4注:當(dāng)for循環(huán)結(jié)束后執(zhí)行else語句;range<a,b>返回一個(gè)序列,從a開始到b為止,但不包括b,range默認(rèn)步長(zhǎng)為1,可以指定步長(zhǎng),range<0,10,2>;4.break語句終止循環(huán)語句,如果從for或while中終止,任何對(duì)應(yīng)循環(huán)的else將不執(zhí)行。5.continue語句continue語句用來調(diào)過當(dāng)前循環(huán)的剩余語句,然后繼續(xù)下一輪循環(huán)。四、函數(shù)函數(shù)通過def定義。def關(guān)鍵字后跟函數(shù)的標(biāo)識(shí)符名稱,然后跟一對(duì)圓括號(hào),括號(hào)之內(nèi)可以包含一些變量名,該行以冒號(hào)結(jié)尾;接下來是一塊語句,即函數(shù)體。defsumOf<a,b>:returna+b1.函數(shù)形參函數(shù)中的參數(shù)名稱為‘形參’,調(diào)用函數(shù)時(shí)傳遞的值為‘實(shí)參’2.局部變量在函數(shù)內(nèi)定義的變量與函數(shù)外具有相同名稱的其他變量沒有任何關(guān)系,即變量名稱對(duì)于函數(shù)來說是局部的。這稱為變量的作用域。global語句,為定義在函數(shù)外的變量賦值時(shí)使用global語句。deffunc<>:globalxprint"xis",xx=1x=3func<>printx#3#13.默認(rèn)參數(shù)通過使用默認(rèn)參數(shù)可以使函數(shù)的一些參數(shù)是‘可選的’。defsay<msg,times=1>:printmsg*timessay<"peter">say<"peter",3>注意:只有在形參表末尾的那些參數(shù)可以有默認(rèn)參數(shù)值,即不能在聲明函數(shù)形參的時(shí)候,先聲明有默認(rèn)值的形參而后聲明沒有默認(rèn)值的形參,只是因?yàn)橘x給形參的值是根據(jù)位置而賦值的。4.關(guān)鍵參數(shù)如果某個(gè)函數(shù)有很多參數(shù),而現(xiàn)在只想指定其中的部分,那么可以通過命名為這些參數(shù)賦值〔稱為‘關(guān)鍵參數(shù)’。優(yōu)點(diǎn):不必?fù)?dān)心參數(shù)的順序,使函數(shù)變的更加簡(jiǎn)單;假設(shè)其他參數(shù)都有默認(rèn)值,可以只給我們想要的那些參數(shù)賦值。deffunc<a,b=2,c=3>:print"ais%s,bis%s,cis%s"%<a,b,c>func<1>#ais1,bis2,cis3func<1,5>#ais1,bis5,cis3func<1,c=10>#ais1,bis2,cis10func<c=20,a=30>#ais30,bis2,cis205.return語句return語句用來從一個(gè)函數(shù)返回,即跳出函數(shù)??蓮暮瘮?shù)返回一個(gè)值。沒有返回值的return語句等價(jià)于returnNone。None表示沒有任何東西的特殊類型。6.DocStrings<文檔字符串>deffunc<>:'''Thisisself-definedfunctionDonothing'''passprintfunc.__doc__#Thisisself-definedfunction##Donothing五、模塊模塊就是一個(gè)包含了所有你定義的函數(shù)和變量的文件,模塊必須以.py為擴(kuò)展名。模塊可以從其他程序中‘輸入’<import>以便利用它的功能。在python程序中導(dǎo)入其他模塊使用'import',所導(dǎo)入的模塊必須在sys.path所列的目錄中,因?yàn)閟ys.path第一個(gè)字符串是空串''即當(dāng)前目錄,所以程序中可導(dǎo)入當(dāng)前目錄的模塊。1.字節(jié)編譯的.pyc文件導(dǎo)入模塊比較費(fèi)時(shí),python做了優(yōu)化,以便導(dǎo)入模塊更快些。一種方法是創(chuàng)建字節(jié)編譯的文件,這些文件以.pyc為擴(kuò)展名。pyc是一種二進(jìn)制文件,是py文件經(jīng)編譯后產(chǎn)生的一種bytecode,而且是跨平臺(tái)的〔平臺(tái)無關(guān)字節(jié)碼,是有python虛擬機(jī)執(zhí)行的,類似于java或.net虛擬機(jī)的概念。pyc的內(nèi)容,是跟python的版本相關(guān)的,不同版本編譯后的pyc文件是不同的。2.from..import如果想直接使用其他模塊的變量或其他,而不加'模塊名+.'前綴,可以使用from..import。例如想直接使用sys的argv,fromsysimportargv或fromsysimport*3.模塊的__name__每個(gè)模塊都有一個(gè)名稱,py文件對(duì)應(yīng)模塊名默認(rèn)為py文件名,也可在py文件中為__name__賦值;如果是__name__,說明這個(gè)模塊被用戶單獨(dú)運(yùn)行。4.dir<>函數(shù)dir<sys>返回sys模塊的名稱列表;如果不提供參數(shù),即dir<>,則返回當(dāng)前模塊中定義名稱列表。del->刪除一個(gè)變量/名稱,del之后,該變量就不能再使用。六、數(shù)據(jù)結(jié)構(gòu)python有三種內(nèi)建的數(shù)據(jù)結(jié)構(gòu):列表、元組和字典。1.列表list是處理一組有序項(xiàng)目的數(shù)據(jù)結(jié)構(gòu),列表是可變的數(shù)據(jù)結(jié)構(gòu)。列表的項(xiàng)目包含在方括號(hào)[]中,eg:[1,2,3],空列表[]。判斷列表中是否包含某項(xiàng)可以使用in,比如l=[1,2,3];print1inl;#True;支持索引和切片操作;索引時(shí)若超出范圍,則IndexError;使用函數(shù)len<>查看長(zhǎng)度;使用del可以刪除列表中的項(xiàng),eg:dell[0]#如果超出范圍,則IndexErrorlist函數(shù)如下:append〔value---向列表尾添加項(xiàng)valuel=[1,2,2]l.append<3>#[1,2,2,3]count<value>---返回列表中值為value的項(xiàng)的個(gè)數(shù)l=[1,2,2]printl.count<2>#2extend<list2>---向列表尾添加列表list2l=[1,2,2]l1=[10,20]l.extend<l1>printl#[1,2,2,10,20]index<value,[start,[stop]]>---返回列表中第一個(gè)出現(xiàn)的值為value的索引,如果沒有,則異常ValueErrorl=[1,2,2]a=4try:printl.index<a>exceptValueError,ve:print"thereisno%dinlist"%ainsert<i,value>---向列表i位置插入項(xiàng)vlaue,如果沒有i,則添加到列表尾部l=[1,2,2]l.insert<1,100>printl#[1,100,2,2]l.insert<100,1000>printl#[1,100,2,2,1000]pop<[i]>---返回i位置項(xiàng),并從列表中刪除;如果不提供參數(shù),則刪除最后一個(gè)項(xiàng);如果提供,但是i超出索引范圍,則異常IndexErrorl=[0,1,2,3,4,5]printl.pop<>#5printl#[0,1,2,3,4]printl.pop<1>#1printl#[0,2,3,4]try:l.pop<100>exceptIndexError,ie:print"indexoutofrange"remove<value>---刪除列表中第一次出現(xiàn)的value,如果列表中沒有vlaue,則異常ValueErrorl=[1,2,3,1,2,3]l.remove<2>printl#[1,3,1,2,3]try:l.remove<10>exceptValueError,ve:print"thereisno10inlist"reverse<>---列表反轉(zhuǎn)l=[1,2,3]l.reverse<>printl#[3,2,1]sort<cmp=None,key=None,reverse=False>---列表排序[PythonLibraryReference]cmp:cmpspecifiesacustomcomparisonfunctionoftwoarguments<iterableelements>whichshouldreturnanegative,zeroorpositivenumberdependingonwhetherthefirstargumentisconsideredsmallerthan,equalto,orlargerthanthesecondargument:"cmp=lambdax,y:cmp<x.lower<>,y.lower<>>"key:keyspecifiesafunctionofoneargumentthatisusedtoextractacomparisonkeyfromeachlistelement:"key=str.lower"reverse:reverseisabooleanvalue.IfsettoTrue,thenthelistelementsaresortedasifeachcomparisonwerereversed.Ingeneral,thekeyandreverseconversionprocessesaremuchfasterthanspecifyinganequivalentcmpfunction.Thisisbecausecmpiscalledmultipletimesforeachlistelementwhilekeyandreversetoucheachelementonlyonce.l5=[10,5,20,1,30]l5.sort<>printl5#[1,5,10,20,30]l6=["bcd","abc","cde","bbb"]l6.sort<cmp=lambdas1,s2:cmp<s1[0],s2[1]>>printl6#['abc','bbb','bcd','cde']l7=["bcd","abc","cde","bbb","faf"]l7.sort<key=lambdas:s[1]>printl7#['faf','abc','bbb','bcd','cde']2.元組tuple和list十分相似,但是tuple是不可變的,即不能修改tuple,元組通過圓括號(hào)中用逗號(hào)分割的項(xiàng)定義;支持索引和切片操作;可以使用in查看一個(gè)元素是否在tuple中??赵M<>;只含有一個(gè)元素的元組<"a",>#需要加個(gè)逗號(hào)優(yōu)點(diǎn):tuple比list速度快;對(duì)不需要修改的數(shù)據(jù)進(jìn)行‘寫保護(hù)’,可以是代碼更安全tuple與list可以相互轉(zhuǎn)換,使用內(nèi)置的函數(shù)list<>和tuple<>。l=[1,2,3]printl#[1,2,3]t=tuple<l>printt#<1,2,3>l1=list<t>printl1#[1,2,3]元組最通常的用法是用在打印語句,如下例:name="PeterZhang"age=25print"Name:%s;Age:%d"%<name,age>#Name:PeterZhang;Age:25函數(shù)如下:count<value>---返回元組中值為value的元素的個(gè)數(shù)t=<1,2,3,1,2,3>printt.count<2>#2index<value,[start,[stop]]>---返回列表中第一個(gè)出現(xiàn)的值為value的索引,如果沒有,則異常ValueErrort=<1,2,3,1,2,3>printt.index<3>#2try:printt.index<4>exceptValueError,ve:print"thereisno4intuple"#thereisno4intuple3.字典字典由鍵值對(duì)組成,鍵必須是唯一的;eg:d={key1:value1,key2:value2};空字典用{}表示;字典中的鍵值對(duì)是沒有順序的,如果想要一個(gè)特定的順序,那么使用前需要對(duì)它們排序;d[key]=value,如果字典中已有key,則為其賦值為value,否則添加新的鍵值對(duì)key/value;使用deld[key]可以刪除鍵值對(duì);判斷字典中是否有某鍵,可以使用in或notin;d={}d["1"]="one"d["2"]="two"d["3"]="three"deld["3"]forkey,valueind.items<>:print"%s-->%s"%<key,value>#1-->one#2-->twodict函數(shù)如下:clear<>---刪除字典中所有元素d1={"1":"one","2":"two"}d1.clear<>printd1#{}copy<>---返回字典的一個(gè)副本<淺復(fù)制>d1={"1":"one","2":"two"}d2=d1.copy<>printd2#{'1':'one','2':'two'}dict.fromkeys<seq,val=None>---創(chuàng)建并返回一個(gè)新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對(duì)應(yīng)的初始值<默認(rèn)為None>l=[1,2,3]t=<1,2,3>d3={}.fromkeys<l>printd3#{1:None,2:None,3:None}d4={}.fromkeys<t,"default">printd4#{1:'default',2:'default',3:'default'}get<key,[default]>---返回字典dict中鍵key對(duì)應(yīng)值,如果字典中不存在此鍵,則返回default的值<default默認(rèn)值為None>d5={1:"one",2:"two",3:"three"}printd5.get<1>#oneprintd5.get<5>#Noneprintd5.get<5,"test">#testhas_key<key>---判斷字典中是否有鍵keyd6={1:"one",2:"two",3:"three"}printd6.has_key<1>#Trueprintd6.has_key<5>#Falseitems<>---返回一個(gè)包含字典中<鍵,值>對(duì)元組的列表d7={1:"one",2:"two",3:"three"}foritemind7.items<>:printitem#<1,'one'>#<2,'two'>#<3,'three'>forkey,valueind7.items<>:print"%s--%s"%<key,value>#1--one#2--two#3--threekeys<>---返回一個(gè)包含字典中所有鍵的列表d8={1:"one",2:"two",3:"three"}forkeyind8.keys<>:printkey#1#2#3values<>---返回一個(gè)包含字典中所有值的列表d8={1:"one",2:"two",3:"three"}forvalueind8.values<>:printvalue#one#two#threepop<key,[default]>---若字典中key鍵存在,刪除并返回dict[key],若不存在,且未給出default值,引發(fā)KeyError異常d9={1:"one",2:"two",3:"three"}printd9.pop<1>#oneprintd9#{2:'two',3:'three'}printd9.pop<5,None>#Nonetry:d9.pop<5>#raiseKeyErrorexceptKeyError,ke:print"KeyError:",ke#KeyError:5popitem<>---刪除任意鍵值對(duì),并返回該鍵值對(duì),如果字典為空,則產(chǎn)生異常KeyErrord10={1:"one",2:"two",3:"three"}printd10.popitem<>#<1,'one'>printd10#{2:'two',3:'three'}setdefault<key,[default]>---若字典中有key,則返回vlaue值,若沒有key,則加上該key,值為default,默認(rèn)Noned={1:"one",2:"two",3:"three"}printd.setdefault<1>#oneprintd.setdefault<5>#Noneprintd#{1:'one',2:'two',3:'three',5:None}printd.setdefault<6,"six">#sixprintd#{1:'one',2:'two',3:'three',5:None,6:'six'}update<dict2>---把dict2的元素加入到dict中去,鍵字重復(fù)時(shí)會(huì)覆蓋dict中的鍵值d={1:"one",2:"two",3:"three"}d2={1:"first",4:"forth"}d.update<d2>printd#{1:'first',2:'two',3:'three',4:'forth'}viewitems<>---返回一個(gè)view對(duì)象,〔key,valuepair的列表,類似于視圖。優(yōu)點(diǎn)是,如果字典發(fā)生變化,view會(huì)同步發(fā)生變化。在迭代過程中,字典不允許改變,否則會(huì)報(bào)異常d={1:"one",2:"two",3:"three"}forkey,valueind.viewitems<>:print"%s-%s"%<key,value>#1-one#2-two#3-threeviewkeys<>---返回一個(gè)view對(duì)象,key的列表d={1:"one",2:"two",3:"three"}forkeyind.viewkeys<>:printkey#1#2#3viewvalues<>---返回一個(gè)view對(duì)象,value的列表d={1:"one",2:"two",3:"three"}forvalueind.viewvalues<>:printvalue#one#two#three4.序列序列類型是指容器內(nèi)的元素從0開始的索引順序訪問,一次可以訪問一個(gè)或者多個(gè)元素;列表、元組和字符串都是序列;序列的兩個(gè)主要特點(diǎn)是索引操作符和切片操作符;索引可以得到特定元素;切片可以得到部分序列;1numbers=["zero","one","two","three","four"]23printnumbers[1]#one4printnumbers[-1]#four5#printnumbers[5]#raiseIndexError67printnumbers[:]#['zero','one','two','three','four']8printnumbers[3:]#['three','four']9printnumbers[:2]#['zero','one']10printnumbers[2:4]#['two','three']11printnumbers[1:-1]#['one','two','three']切片操作符中的第一個(gè)數(shù)〔冒號(hào)之前表示切片開始的位置,第二個(gè)數(shù)〔冒號(hào)之后表示切片到哪里結(jié)束。如果不指定第一個(gè)數(shù),Python就從序列首開始。如果沒有指定第二個(gè)數(shù),則Python會(huì)停止在序列尾。注意,返回的序列從開始位置開始,剛好在結(jié)束位置之前結(jié)束。即開始位置是包含在序列切片中的,而結(jié)束位置被排斥在切片外??梢杂秘?fù)數(shù)做切片。負(fù)數(shù)用在從序列尾開始計(jì)算的位置。5.綁定當(dāng)創(chuàng)建一個(gè)對(duì)象并給它賦一個(gè)變量的時(shí)候,這個(gè)變量?jī)H僅"指向"那個(gè)對(duì)象,而不是表示這個(gè)對(duì)象本身!也就是說,變量名指向計(jì)算機(jī)中存儲(chǔ)那個(gè)對(duì)象的內(nèi)存,這被稱作名稱到對(duì)象的綁定。如果要復(fù)制一個(gè)列表或者類似的序列或者其他復(fù)雜的對(duì)象〔不是如整數(shù)那樣的簡(jiǎn)單對(duì)象,那么必須使用切片操作符來取得拷貝。七、面向?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)建,類的域和方法被列在一個(gè)縮進(jìn)塊中。類的方法必須有一個(gè)額外的第一個(gè)參數(shù),但是在調(diào)用時(shí)不為這個(gè)參數(shù)賦值,這個(gè)特殊變量指對(duì)象本身,按照慣例它的名稱是self,類似C#中的this。classAnimal:pass#emptyblock__init__方法在類的一個(gè)對(duì)象被創(chuàng)建時(shí)調(diào)用該方法;相當(dāng)于c++中的構(gòu)造函數(shù)。__del__方法在類的對(duì)象被銷毀時(shí)調(diào)用該方法;相當(dāng)于c++中的析構(gòu)函數(shù)。在使用del刪除一個(gè)對(duì)象時(shí)也就調(diào)用__del__方法。Python中所有的類成員<包括數(shù)據(jù)成員>都是public的;只有一個(gè)例外,如果使用的數(shù)據(jù)成員以雙下劃線為前綴,則為私有變量。classPerson:Count=0def__init__<self,name,age>:Person.Count+=1=nameself.__age=agep=Person<"peter",25>p1=Person<"john",20>printPerson.Count#2print#peterprintp.__age#AttributeError:Personinstancehasnoattribute'__age'繼承:為了使用繼承,基類的名稱作為一個(gè)元組跟在類名稱的后面;python支持多重繼承。下面是一個(gè)關(guān)于繼承的例子:1classSchoolMember:2'''Representanyschoolmember.'''3def__init__<self,name,age>:4=name5self.age=age6print"Initializingaschoolmember."78deftell<self>:9'''Tellmydetails'''10print"Name:%s,Age:%s,"%<,self.age>,1112classTeacher<SchoolMember>:13'''Representateacher.'''14def__init__<self,name,age,salary>:15SchoolMember.__init__<self,name,age>16self.salary=salary17print"Initializingateacher"1819deftell<self>:20SchoolMember.tell<self>21print"Salary:%d"%self.salary2223classStudent<SchoolMember>:24'''Representastudent.'''25def__init__<self,name,age,marks>:26SchoolMember.__init__<self,name,age>27self.marks=marks28print"Initializingastudent"2930deftell<self>:31SchoolMember.tell<self>32print"Marks:%d"%self.marks3334printSchoolMember.__doc__35printTeacher.__doc__36printStudent.__doc__3738t=Teacher<"Mr.Li",30,9000>39s=Student<"Peter",25,90>4041members=[t,s]4243forminmembers:44m.tell<>程序輸出如下:Representanyschoolmember.Representateacher.Representastudent.Initializingaschoolmember.InitializingateacherInitializingaschoolmember.InitializingastudentName:Mr.Li,Age:30,Salary:9000Name:Peter,Age:25,Marks:90八、輸入/輸出程序與用戶的交互需要使用輸入/輸出,主要包括控制臺(tái)和文件;對(duì)于控制臺(tái)可以使用raw_input和print,也可使用str類。raw_input<xxx>輸入xxx然后讀取用戶的輸入并返回。1.文件輸入/輸出可以使用file類打開一個(gè)文件,使用file的read、readline和write來恰當(dāng)?shù)淖x寫文件。對(duì)文件讀寫能力取決于打開文件時(shí)使用的模式,常用模式有讀模式<"r">、寫模式<"w">、追加模式<"a">,文件操作之后需要調(diào)用close方法來關(guān)閉文件。1test='''\2ThisisaprogramaboutfileI/O.34Author:PeterZhange5Date:2011/12/256'''78f=file<"test.txt","w">#openforwriting,thefilewillbecreatedifthefiledoesn'texist9f.write<test>#writetexttofile10f.close<>#closethefile1112f=file<"test.txt">#ifnomodeisspecified,thedefaultmodeisreadonly.1314whileTrue:15line=f.readline<>16iflen<line>==0:#zerolengthindicatestheEOFofthefile17break18printline,1920f.close<>2.存儲(chǔ)器python提供一個(gè)標(biāo)準(zhǔn)的模塊,成為pickle,使用它可以在一個(gè)文件中存儲(chǔ)任何python對(duì)象,之后可以完整的取出來,這被稱為持久地存儲(chǔ)對(duì)象;還有另外一個(gè)模塊成為cPickle,它的功能和pickle完全一樣,只不過它是用c寫的,要比pickle速度快<大約快1000倍>。importcPickledatafile="data.data"namelist=["peter","john","king"]f=file<datafile,"w">cPickle.dump<namelist,f>f.close<>delnamelistf=file<datafile>storednamelist=cPickle.load<f>printstorednamelist#['peter','john','king']九、異常當(dāng)程序中出現(xiàn)某些異常的狀況時(shí),異常就發(fā)生了。python中可以使用try...except處理。try:print1/0exceptZeroDivisionError,e:printeexcept:print"errororexceptionoccurred."#integerdivisionormodulobyzero可以讓try...except關(guān)聯(lián)上一個(gè)else,當(dāng)沒有異常時(shí)則執(zhí)行else。我們可以定義自己的異常類,需要繼承Error或Exception。classShortInputException<Exception>:'''Auser-definedexceptionclass'''def__init__<self,length,atleast>:Exception.__init__<self>self.length=lengthself.atleast=atleasttry:s=raw_input<"entersometing-->">iflen<s><3:raiseShortInputException<len<s>,3>exceptEOFError:print"whyyouinputanEOF?"exceptShortInputException,ex:print"Thelenghtofinputis%d,wasexpectingattheleast%d"%<ex.length,ex.atleast>else:print"noexception"#Thelenghtofinputis1,wasexpectingattheleast3try...finallytry:f=file<"test.txt">whileTrue:line=f.readline<>iflen<line>==0:breaktime.sleep<2>printline,finally:f.close<>print"Cleaningup..."十、Python標(biāo)準(zhǔn)庫Python標(biāo)準(zhǔn)庫是隨Pthon附帶安裝的,包含了大量極其有用的模塊。1.sys模塊sys模塊包含系統(tǒng)對(duì)應(yīng)的功能sys.argv---包含命令行參數(shù),第一個(gè)參數(shù)是py的文件名sys.platform---返回平臺(tái)類型sys.exit<[status]>---退出程序,可選的status<范圍:0-127>:0表示正常退出,其他表示不正常,可拋異常事件供捕獲nd添加自己的模塊路徑sys.modules---Thisisadictionarythatmapsmodulenamestomoduleswhichhavealreadybeenloadedsys.stdin,sys.stdout,sys.stderr---包含與標(biāo)準(zhǔn)I/O流對(duì)應(yīng)的流對(duì)象s=sys.stdin.readline<>sys.stdout.write<s>2.os模塊該模塊包含普遍的操作系統(tǒng)功能字符串指示你正在使用的平臺(tái)。比如對(duì)于Windows,它是'nt',而對(duì)于Linux/Unix用戶,它是'posix'os.getcwd<>函數(shù)得到當(dāng)前工作目錄,即當(dāng)前Python腳本工作的目錄路徑os.getenv<>和os.putenv<>函數(shù)分別用來讀取和設(shè)置環(huán)境變量os.listdir<>返回指定目錄下的所有文件和目錄名os.remove<>函數(shù)用來刪除一個(gè)文件os.system<>函數(shù)用來運(yùn)行shell命令os.linesep字符串給出當(dāng)前平臺(tái)使用的行終止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'os.sep操作系統(tǒng)特定的路徑分割符os.path.split<>函數(shù)返回一個(gè)路徑的目錄名和文件名os.path.isfile<>和os.path.isdir<>函數(shù)分別檢驗(yàn)給出的路徑是一個(gè)文件還是目錄os.path.existe<>函數(shù)用來檢驗(yàn)給出的路徑是否真地存在十一、其他1.一些特殊的方法名稱 說明__init__<self,...> 這個(gè)方法在新建對(duì)象恰好要被返回使用之前被調(diào)用。__del__<self> 恰好在對(duì)象要被刪除之前調(diào)用。__str__<self> 在我們對(duì)對(duì)象使用print語句或是使用str<>的時(shí)候調(diào)用。__lt__<self,other> 當(dāng)使用小于運(yùn)算符〔<的時(shí)候調(diào)用。類似地,對(duì)于所有的運(yùn)算符〔+,>等等都有特殊的方法。__getitem__<self,key> 使用x[key]索引操作符的時(shí)候調(diào)用。__len__<self> 對(duì)序列對(duì)象使用內(nèi)建的len<>函數(shù)的時(shí)候調(diào)用。下面的類中定義了上表中的方法:classArray:__list=[]def__init__<self>:print"constructor"def__del__<self>:print"destructor"def__str__<self>:return"thisself-definedarrayclass"def__getitem__<self,key>:returnself.__list[key]def__len__<self>:returnlen<self.__list>defAdd<self,value>:self.__list.append<value>defRemove<self,index>:delself.__list[index]defDisplayItems<self>:print"showallitems----"foriteminself.__list:printitemarr=Array<>#constructorprintarr#thisself-definedarrayclassprintlen<arr>#0arr.Add<1>arr.Add<2>arr.Add<3>printlen<arr>#3printarr[0]#1arr.DisplayItems<>#showallitems----#1#2#3arr.Remove<1>arr.DisplayItems<>#showallitems----#1#3#destructor2.綜合列表通過列表綜合,可以從一個(gè)已有的列表導(dǎo)出一個(gè)新的列表。list1=[1,2,3,4,5]list2=[i*2foriinlist1ifi>3]printlist1#[1,2,3,4,5]printlist2#[8,10]3.函數(shù)接收元組/列表/字典當(dāng)函數(shù)接收元組或字典形式的參數(shù)的時(shí)候,有一種特殊的方法,使用*和**前綴。該方法在函數(shù)需要獲取可變數(shù)量的參數(shù)的時(shí)候特別有用。由于在args變量前有*前綴,所有多余的函數(shù)參數(shù)都會(huì)作為一個(gè)元組存儲(chǔ)在args中。如果使用的是**前綴,多余的參數(shù)則會(huì)被認(rèn)為是一個(gè)字典的鍵/值對(duì)。defpowersum<power,*args>:total=0foriinargs:total+=pow<i,power>returntotalprintpowersum<2,1,2,3>#14defdisplaydic<**args>:forkey,valueinargs.items<>:print"key:%s;value:%s"%<key,value>displaydic<a="one",b="two",c="three">#key:a;value:one#key:c;value:three#key:b;value:two4.lambdalambda語句被用來創(chuàng)建新的函數(shù)對(duì)象,并在運(yùn)行時(shí)返回它們。lambda需要一個(gè)參數(shù),后面僅跟單個(gè)表達(dá)式作為函數(shù)體,而表達(dá)式的值被這個(gè)新建的函數(shù)返回。注意,即便是print語句也不能用在lambda形式中,只能使用表達(dá)式。func=lambdas:s*3printfunc<"peter">#peterpeterpeterfunc2=lambdaa,b:a*bprintfunc2<2,3>#65.exec/evalexec語句用來執(zhí)行儲(chǔ)存在字符串或文件中的Python語句;eval語句用來計(jì)算存儲(chǔ)在字符串中的有效Python表達(dá)式。cmd="print'helloworld'"execcmd#helloworldexpression="10*2+5"printeval<expression>#256.assertassert語句用來斷言某個(gè)條件是真的,并且在它非真的時(shí)候引發(fā)一個(gè)錯(cuò)誤--AssertionError。flag=Trueassertflag==Truetry:assertflag==FalseexceptAssertionError,err:print"failed"else:print"pass"7.repr函數(shù)repr函數(shù)用來取得對(duì)象的規(guī)范字符串表示。反引號(hào)〔也稱轉(zhuǎn)換符可以完成相同的功能。注意,在大多數(shù)時(shí)候有eval<repr<object>>==object??梢酝ㄟ^定義類的__repr__方法來控制對(duì)象在被repr函數(shù)調(diào)用的時(shí)候返回的內(nèi)容。arr=[1,2,3]print`arr`#[1,2,3]printrepr<arr>#[1,2,3]十二、練習(xí)實(shí)現(xiàn)一個(gè)通訊錄,主要功能:添加、刪除、更新、查詢、顯示全部聯(lián)系人。1importcPickle2importos3importsys45classContact:6def__init__<self,name,phone,mail>:7=name8self.phone=phone9self.mail=mail1011defUpdate<self,name,phone,mail>:12=name13self.phone=phone14self.mail=mail1516defdisplay<self>:17print"name:%s,phone:%s,mail:%s"%<,self.phone,self.mail>181920#begin2122#filetostorecontactdata23data=os.getcwd<>+os.sep+"contacts.data"2425whileTrue:26print"-----------------------------------------------------------------------"27operation=raw_input<"inputyouroperation<add/delete/modify/search/all/exit>:">2829ifoperation=="exit":30sys.exit<>3132ifos.path.exists<data>:33ifos.path.getsize<data>==0:34contacts={}35else:36f=file<d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論