第1課python基礎(chǔ)入門知識(shí)1簡明_第1頁
第1課python基礎(chǔ)入門知識(shí)1簡明_第2頁
第1課python基礎(chǔ)入門知識(shí)1簡明_第3頁
第1課python基礎(chǔ)入門知識(shí)1簡明_第4頁
第1課python基礎(chǔ)入門知識(shí)1簡明_第5頁
已閱讀5頁,還剩130頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

前 本書的讀 本書的由 約定條 反 第1章介 簡 程序員的 第2章安裝 概 第3章最初的步 簡 使用源文 獲取幫 概 第4章基本概 字符 變 標(biāo)識(shí)符 數(shù)據(jù)類 對(duì) 縮 概 第5章運(yùn)算符與表達(dá) 簡 運(yùn)算 表達(dá) 概 第6章控制 簡 break語 概 第7章函 簡 函數(shù)形 局部變 默認(rèn)參數(shù) 關(guān)鍵參 概 第8章模 簡 模塊的 概 第9章數(shù)據(jù)結(jié) 簡 列 元 字 序 參 概 第10章解決問題——編寫一個(gè)Python.............................................................................問 解決方 概 第11章面向?qū)ο蟮木?簡 對(duì)象的方 繼 概 第12章輸入/輸 文 概 第13章異 錯(cuò) 異 概 第14章Python標(biāo)準(zhǔn) 簡 概 第15章Python的內(nèi) 特殊的方 單語句 列表綜 概 第16章接下來學(xué)習(xí)什么 圖形軟 探索內(nèi) 概 附錄A自由/開放源碼軟件 附錄B關(guān)于本 后 附錄C修訂記 時(shí)間 術(shù)語 Copyright?2003-2005SwaroopC 》為"AByteofPython"的唯一指定簡體中文譯本?2005Python習(xí)Python。如果你有編程經(jīng)驗(yàn),你也可以使用本書學(xué)習(xí)Python。之間的區(qū)別感。對(duì)此我為你了許多這樣的區(qū)別。順便提醒你,Python我最初接觸Python是當(dāng)我需要為我的軟件鉆石寫一個(gè)方便安裝過程的安裝程序Python和Perl語言中選擇一個(gè)綁定QtEricS.Raymond(著名的電腦高手)談Python如何成為它最喜歡地編程語言的一篇文章。我同時(shí)發(fā)現(xiàn)PyQt綁定與Perl-Qt相比要出色得多,所以我選擇了Python語言。Python。如果你覺得本書中有什么BoaConstructor。本書的是 fo。你可以在這個(gè)上閱讀本書,也可以本書的版本或給我反饋。那里還有環(huán)畫似的約定條款的解釋?!狢.A.R.——C.W.表Python語言是少有的一種可以稱得上即簡單又功能強(qiáng)大的編程語言。你將驚喜Python是一種簡單易學(xué),功能強(qiáng)大的編程語言,它有高效率的數(shù)據(jù)結(jié)構(gòu),簡單而有效地實(shí)現(xiàn)面向?qū)ο缶幊獭ython簡潔的語法和對(duì)動(dòng)態(tài)輸入的支持,再感覺像是在讀英語一樣,盡管這個(gè)英語的要求非常嚴(yán)格!Python的這種就如同你即將看到的一樣,Python極其容易上手。前面已經(jīng)提到了,新的自由軟件中。FLOSS是基于一個(gè)團(tuán)體知識(shí)的概念。這是為什么Python如此優(yōu)秀的原因之一——它是由一群希望看到一個(gè)更加優(yōu)秀的Python的人創(chuàng)造并經(jīng)常改進(jìn)著的。由于它的開源本質(zhì),Python(經(jīng)過改動(dòng)使它能你的所有Python程序無需修改就可以在下述任何平臺(tái)上面運(yùn)行。這些平臺(tái)包括Linux、Windows、BSD、Macintosh、Solaris、OS/2、AcomRISCOS、VxWorks、yStation、SharpZaurus、WindowsCE甚至還有PocketPC!轉(zhuǎn)換到一個(gè)你的計(jì)算機(jī)使用的語言(二進(jìn)制代碼,即01)。這個(gè)過程于你不再需要擔(dān)心如何編譯程序,如何確保連接正確的庫等等,所有Python的面向的語言中,程序是由數(shù)據(jù)和功能組合而成的對(duì)象構(gòu)建起來的。與其Python標(biāo)準(zhǔn)庫確實(shí)很龐大。它可以幫助你處理各種工作,包括正則表達(dá)TkPython,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫以外,還有許多其他高質(zhì)量的庫,如wxPython、TwistedPerl“使工作完成”。然而,當(dāng)你想開始寫一些大一點(diǎn)的程序的時(shí)候,Perl程序就懂、易。我確實(shí)也很喜歡Perl,用它來做一些日常的各種事情。不過當(dāng)我要寫一個(gè)程序的時(shí)候,我總是想到使用Python,這對(duì)我來說已經(jīng)成了十分自然 另外,新的Parrot虛擬機(jī)按設(shè)計(jì)可以運(yùn)行完全重新設(shè)計(jì)的Perl6也可以運(yùn)行EricS.Raymond是《TheCathedralandtheBazaar》的作者、“開放他說沒有一種語言比得上Python使他的工作效率如此之高。同時(shí)他說PeterNorvig是著名的Lisp語言書籍的作者和公司的搜索質(zhì)量主任(感謝GuidovanRossum告訴我這一點(diǎn))。他說Python始終是UserLinux旨在創(chuàng)造一個(gè)可以被多家商支持標(biāo)準(zhǔn)的Linux版。表要測(cè)試你是否已經(jīng)隨著你的Linux包安裝了Python,你可以打開一個(gè)s程序(就像konsole或gnome-terminal)然后輸入如下所示令python-V。$python-VPython2.3.4$$python-bash:python:commandnot在這種情況下,你有兩種方法在你的系統(tǒng)上安裝Python。利用你的操作系統(tǒng)附帶的包管理軟件安裝二進(jìn)制包,比如FedoraLinux的yum、MandrakeLinux的urpmi、DebianLinux的apt-get、BSDpkg_add等等。注意,使用這種方法的話,你需要連接因特網(wǎng)。 Windows?用戶可以P/download,從上的版本(在寫本書的時(shí)候,版本是2.3.4版)。它的大小大約是9.4MB,與其他大多數(shù)語 設(shè)置PATH變量。對(duì)于Windows2000、XP、2003,點(diǎn)擊控制面板->系統(tǒng)->高級(jí)->環(huán)的正確名。NT,則使用AUTOEXEC.NT文件。LinuxPython。否則,你可以通統(tǒng)里安裝了Python。表你將學(xué)會(huì)如何編寫、保存和運(yùn)行Python程序。使用源文件。學(xué)習(xí)這兩種方法。在命令行的s 提示符下鍵入python,啟動(dòng)解釋器?,F(xiàn)在輸入print'oWorld',然后按Enter鍵。你應(yīng)該可以看到輸出的單詞 oWorld。始->程序->Python2.3->IDLE(PythonGUI)。Linux用戶也可以使用IDLE。3.1Python$$Python2.3.4(#1,Oct262004,[GCC (RedHat3.4.2-6.fc3)]onType"help","copyright","credits"or"license"formore>>>print' oworldprint(不要驚訝)oWorld輛你將的轎車一樣。一個(gè)好的編輯器會(huì)幫助你方便地編寫Python程序,使WindowsIDLE。IDLEIDLE不個(gè)好的編輯器,比如IDLE(還有VIM)將會(huì)自動(dòng)幫助你做這些事情。我的大多數(shù)程序。如果你是一個(gè)初學(xué)編程的人,那么你可以使用Kate,它也是下詳盡的支持Python的IDE列表以獲得詳盡的信息。一旦你開始編寫大型的一個(gè)程序通常都是“oWorld”程序,這已經(jīng)成為一種傳統(tǒng)了。在你運(yùn)行“oWorld”程序的時(shí)候,它所做的事只是說聲:“oWorld”。正如提出“oWorld”程序的SimonCozens[1]所說:“它是編程之神的傳統(tǒng)語,3.2#Filename: print' oWorld'(源文件:code/s(LinuxDOS),然后鍵入命pythonoworld.pyIDLEEdit->RunScript或者使用鍵盤快捷方式Ctrl-F5。輸出如下所示。$$python oWorld第一個(gè)Python程序?!念^兩個(gè)字符是#!,后面跟著一個(gè)程序。這行告訴你的Linux/Unix系統(tǒng)當(dāng)你執(zhí)如同命令pythonoworld.py一樣。在你的程序中合理地使用注釋以解釋一些重要的細(xì)節(jié)——這將有能就是6個(gè)月以后的你!跟在注釋之后的是一句Python語句——它只是打印文本“oWorld”。行比較好奇。首先我們需要通過od命令,給程序可執(zhí)行的,然后運(yùn)行程$$od ood命令用來改變文件的模式,給系統(tǒng)中所有用戶這個(gè)源文件的執(zhí)行許序位于當(dāng)前。為了更加有趣一些,你可以的文件名改成僅僅oworld,然后運(yùn)PATH錄。然后運(yùn)行那個(gè)程序。你只要簡單地把這個(gè)源文件到PATH所列之一$$echo$ oworld.py o們需要這個(gè)變量的值。我們看到/home/swaroop/bin是PATH變量中的 swaroop是我的系統(tǒng)中使用的用戶名。通常,在你的系統(tǒng)中也會(huì)有一個(gè)相似的目錄。你也可以選擇的 添加到PATH變量中去——這可以通過運(yùn)行PATH=$PATH:/home/swaroop/mydir完成,其中“/home/swaroop/mydir”是我想要添加到PATH變量中的 cdLinuxDOS如果你需要某個(gè)Python函數(shù)或語句的快速信息幫助,那么你可以使用內(nèi)建的help功能。尤其在你使用帶提示符令行的時(shí)候,它十分有用。比如,運(yùn)行于help本身的東西!如果你想要獲取關(guān)于如print那樣操作符的幫助,那么你需要正確的設(shè)置 Python2.3.4(#1,Oct262004,[GCC (RedHat3.4.2-6.fc3)]onType"help","copyright","credits"or"license"formore>>> Python的概念表僅僅打印“oWorld”就足夠了嗎?你應(yīng)該想要做的事——你想要得到一些輸入,然后作,再從中得到一些輸出。在Python中,我們可以使用常isastring'、"It'sastring!"這樣的字符串。它們被稱作字面意義上的,因?yàn)樗鼣?shù)表示52.3*10-4。這部分的內(nèi)容。下面告訴你如何在Python中使用字符串。在雙引號(hào)中的字符串與單引號(hào)中的字符串的使用完全相同,例如'''This'''Thisisamulti-linestring.Thisisthefirstline.Thisisthesecondline."What'syourname?,"Iasked.Hesaid"Bond,JamesBond."What'syourname?"This"ThisisthefirstThisisthesecond等價(jià)于"Thisisthefirstsentence.ThisisthesecondrR來指Unicode是書寫國際文本的標(biāo)準(zhǔn)方法。如果你想要用你的母語如北語U。例如,u"ThisisaUnicodestring."Python 符可以寫成'\\1'或r'\1'。僅僅使用字面意義上的常量很快就會(huì)煩惱——我們需要一種既可以信。變量就是我們想線(‘_’)。標(biāo)識(shí)符名稱的其他部分可以由字母(大寫或小寫)、下劃線(_)識(shí)符。注意前者中的小寫n和后者中的大寫N。i、my_name、name_23a1b2_c3因此我們不會(huì)說“某某東西”,我們說“某個(gè)對(duì)象”。運(yùn)行解釋器命令pythonprogram.py或者使用IDLE運(yùn)行程##Filename:var.pyi=5printii=i+1printis='''Thisisamulti-linestring.Thisisthesecondline.'''print($$pythonvar.py6Thisisamulti-linestring.Thisisthesecondline.i的值,就是把變量的值打印在屏幕上。sPythonPython邏輯行的例子如print' i=i=5ii=printii=5;printii=5;print然而,我強(qiáng)烈建議你堅(jiān)持在每個(gè)物理行只寫一句邏輯行。僅僅當(dāng)邏輯行太長的時(shí)ss='Thisisastring.Thiscontinuesthestring.'printsThisThisisastring.Thiscontinuestheprintprint你需要記住的一樣?xùn)|西是錯(cuò)誤的縮進(jìn)會(huì)錯(cuò)誤。例如ii=print'Valueis',i#Error!Noticeasinglespaceatthestartofthelineprint'Irepeat,thevalueis',FileFile"whitespace.py",lineprint'Valueis',i#Error!Noticeasinglespaceatthestartoftheline^^SyntaxError:invalid貫地使用它,即只使用這一種風(fēng)格。表運(yùn)算符的功能是完成某件事,它們由如+這樣的符號(hào)或者其他特定的關(guān)鍵字表2和3是操作數(shù)。達(dá)式2+3,使用交互式的帶提示符的Python解釋器:>>>>>>2+5>>>3*+加358。'ab'得到'ab'-減-5.2得到一個(gè)負(fù)數(shù)。502426*乘2*36。'la*3得到'lalala'冪返回xy3**481(3*3*3*/除4/3得到1(整數(shù)的除法得到整數(shù)結(jié)果)。4.0/3或4/3.0得到43.0%把一個(gè)數(shù)的比特向左移一定數(shù)目二進(jìn)制數(shù)字,即0和1)2<<28?!?即十進(jìn)制的5。&5&31|5|37^按位異或5^3~按位翻x的按位翻轉(zhuǎn)是<xy。所有比較運(yùn)算10表示假。True530(False)35True357True>5>3True。如果兩個(gè)操作數(shù)都小于等x3;y6;xyTrue大于等于x4;y3;xyTruex2;y2;xyTruexstr';ystRxyFalse。xstrstrxyTruex2;y3;xyTrue xTruenotyFalse 否則它返回y的計(jì)算值。xFalse;yTrue;xandyx是False,返回False。在這里,Pytho不會(huì)計(jì)算yFalse 它返回y的計(jì)算值。xTrueyFalsexoryTrue。2+3*4的中學(xué)數(shù)學(xué)告訴我們應(yīng)當(dāng)先做乘法——這意味著乘法運(yùn)算符的優(yōu)先級(jí)高于加法最高的優(yōu)先級(jí)(最緊密地結(jié)合)。這意味著在一個(gè)表達(dá)式中,Python會(huì)首先計(jì)的先后順序,使程序盡可能地易讀。例如,23*4)23*4此同時(shí),圓括號(hào)也應(yīng)該正確使用,而不應(yīng)該用得過濫(234))notin,notis,is|^&加法在乘法之前計(jì)算,那么你就得寫成類似(2+3)*4的樣子。算。例如,234被計(jì)算成(23)4。一些如賦值運(yùn)算符那樣的運(yùn)算符是由a=b=ca=(b=c)。#Filename:length=breadth=area=length*breadthprint'Areais',areaprint'Perimeteris',2*(length+(Areais10Perimeterisprint2*lengthPython'Areais'和變量area之間指定空格,Python格問題)。這是Python如何使程序員的生活變得更加輕松的一個(gè)例子。 表在到目前為止我們所見到的程序中,總是有一系列的語句,Python忠實(shí)地按照句——if、for和while。#Filename:number=guess=int(raw_input('Enteraninteger:ifguess==print'Congratulations,youguessedit.'#Newblockstartsprint"(butyoudonotwinanyprizes!)"#Newblockendselifguess<printprint'No,itisalittlehigherthanthat'#Anotherblock#Youcandowhateveryouwantinablock...print'No,itisalittlelowerthan#youmusthaveguess>numbertoreachprint#Thislaststatementisalwaysexecuted,aftertheifstatementisexecuted($$pythonEnteraninteger:No,itisalittlelowerthanthat$pythonEnteraninteger:No,itisalittlehigherthanthat$pythonEnteraninteger:23Congratulations,youguessedit.(butyoudonotwinanyprizes!)后,我們使用raw_input()在下一章學(xué)習(xí)raw_input函數(shù)提供一個(gè)字符串,這個(gè)字符串被打印在屏幕上,elififelse-ifelseif-elif-else語句。這使得程序更加簡單,并且減少了所需elifelse從句都必須在邏輯行結(jié)尾處有一個(gè)冒號(hào),下面跟著一個(gè)相應(yīng)的語句記住,elifelseifififprint'Yes,itisif語句塊的下一個(gè)語句。在這個(gè)例子中,這個(gè)語句塊是主塊。程序從主塊'只要在一個(gè)條件為真的情況下,while語句允許你重復(fù)執(zhí)行一塊語句。while語句是所謂循環(huán)語句的一個(gè)例子。while語句有一個(gè)可選的else從句。#Filename:number=23whileguess=int(raw_input('Enteraninteger:ifguess==print'Congratulations,youguessedrunning=False#thiscausesthewhilelooptostopelifguess<number:print'No,itisalittlehigherthanthat'print'No,itisalittlelowerthanthat'print'Thewhileloopis#Doanythingelseyouwanttodoprint($pythonwhile.pyEnter$pythonwhile.pyEnteraninteger:50No,itisalittlelowerthanthat.Enteraninteger:22No,itisalittlehigherthanthat.Enteraninteger:23Congratulations,youguessedit.Thewhileloopisover.猜測(cè)重復(fù)執(zhí)行一遍程序。這個(gè)例子恰當(dāng)?shù)卣f明了while語句的使用。raw_inputifwhilewhilerunningwhile-塊,否則,我們繼續(xù)執(zhí)行可選的else-塊,并接著執(zhí)行下一個(gè)語句。while循環(huán)條件變?yōu)镕alse的時(shí)候,else塊才被執(zhí)行——這甚至也可能是在除非你的while循環(huán)將循環(huán)下去不會(huì)結(jié)束!檢驗(yàn)重要條件的時(shí)候,布爾類型十分重要,它們并不是真實(shí)的值1。中,跟在while語句之后,這樣可以取得相同的效果。#Filename:foriinrange(1,5):printiprint'Theforloopis234Theforloopisrange函數(shù)生成始到第二個(gè)數(shù)為止。例如,range(1,5)給出序列[1,2,3,4]。默認(rèn)地,range的步長為1。如果我們?yōu)閞ange提供第三個(gè)數(shù),那么它將成為步長。例如,range(1,5,2)給出[1,3]。記住,range向上延伸到第二個(gè)數(shù),即它不包含第二for循環(huán)在這個(gè)范圍內(nèi)遞歸——foriinrange(1,5)foriin12,34],這行這個(gè)程序塊。在這個(gè)例子中,我們只是打印i的值。記住,for..inrange程序員會(huì)注意到它與Java1.5for(inti:IntArray)相似。foriinrange(0,5)。你會(huì)注意到,Pythonfor循環(huán)更加#Filename:whiles=raw_input('Entersomething:')ifs=='quit':print'Lengthofthestringis',len(s)print'Done'($$pythonEntersomething:ProgrammingisfunLengthofthestringis18Entersomething:WhentheworkisdoneLengthofthestringis21Entersomething:ifyouwannamakeyourworkalsofun:Lengthofthestringis37Entersomething: Lengthofthestringis12Entersomething:quit記住,breakfor循環(huán)中使用。ProgrammingisfunWhenProgrammingisfunWhentheworkisdoneifyouwannamakeyourworkalsofun:usePython!#Filename:whiles=raw_input('Entersomething:')ifs=='quit':iflen(s)<3:print'Inputisofsufficient#Dootherkindsofprocessing($pythoncontinue.pyEntersomething:aEntersomething:12Enter$pythoncontinue.pyEntersomething:aEntersomething:12Entersomething:abcInputisofsufficientlengthEntersomething:quit3,使用continue語句忽略塊中的剩余的語句。否則,這個(gè)循環(huán)中的剩我們已經(jīng)學(xué)習(xí)了如何使用三種控制流語句——if、whilefor以及與它們相關(guān)接下來,表們已經(jīng)使用了許多內(nèi)建的函數(shù),比如len和range。#Filename:def print oWorld!'#blockbelongingtotheo()#callthe(oWorld!函數(shù)取得的參數(shù)是你提供給函數(shù)的值,這樣函數(shù)就可以利用這些值做一些事提供給函數(shù)調(diào)用的值稱為實(shí)參。#Filename:ifa>b:printa,'isprintb,printMax(3,4)#directlygivelx=y=printMax(x,y)#givevariablesas(源文件:code/func4is 7 用中,我們使用變量調(diào)用函數(shù)。printMax(xy)xa,實(shí)參y的值賦給形參b。在兩次調(diào)用中,printMax函數(shù)的工作完全相同。#Filename:deffunc(x):print'xis',xx=2print'Changedlocalxto',x=x=print'xisstill',(源文件:code/funcxis50Changedlocalxto2xisstill502x。xglobal語句可以清楚地表明變量是在外面#Filename:defdeffunc():globalprint'xis',xx=2print'Changedlocalxto',x=print'Valueofxis',(xis50Changedglobalxto2Valueofxis2global語句被用來x是全局的——因此,當(dāng)我們?cè)诤瘮?shù)內(nèi)把值賦給x的時(shí)候,這個(gè)變化也反映在我們?cè)谥鲏K中使用x的值的時(shí)候。#Filename:defsay(message,times=printmessage*say('World',($$pythonfunc_default.py來實(shí)現(xiàn)這能。say的時(shí)候,我們只提供一個(gè)字符串,函數(shù)只打印一次字符串。字符串消息5遍。這是因?yàn)橘x給形參的值是根據(jù)位置而賦值的。例如,defb=5)deffunc(a=5b)——一,由于我們不必?fù)?dān)心參數(shù)的順序,使用函數(shù)變得更加#Filename:deffunc(a,b=5,print'ais',a,'andbis',b,'andcis',func(3,7)func(25,c=24)(源文件:code/func$$pythonais3andbis7andcis10ais25andbis5andcis24ais100andbis5andcis參數(shù)c使用默認(rèn)值10。根據(jù)命名,即關(guān)鍵參數(shù),參數(shù)c24b根據(jù)默認(rèn)值,為5。return返回一個(gè)值。#Filename: ifx>y:returnreturnum(2,(printsomeFunction()someFunction沒有使用return語句,如同:Python有一個(gè)很奇妙的特性,稱為文檔字符串,它通常被簡稱為#Filename:defprintMax(x,'''Prints umoftwoThetwovaluesmustbex=int(x)#converttointegers,ifpossibley=int(y)ifx>printx,'isprinty,printMax(3,printprintMax.(源文件:code/func$$pythonfunc_doc.py5is Prints umoftwoThetwovaluesmustbe你可以使用doc(注意雙下劃線)調(diào)用printMax函數(shù)的文檔字符串屬性(屬們會(huì)在后面的類一章學(xué)習(xí)關(guān)于對(duì)象的知識(shí)。它所做的只是抓取函數(shù)的doc屬性,然后整潔地展示給你。你可以對(duì)上面這個(gè)函數(shù)嘗試一下——只是在你的程序中包括help(printMax)。記住按q退出對(duì)你所寫的任何正式函數(shù)編寫文檔字符串。隨你的Python版附帶的pydoc命令,與help()類似地使用DocStrings。Python 表程序中重用模塊,模塊的文件名必須以.py為擴(kuò)展名。#Filename:using_sys.pyimportsysprint'Thecommandlineargumentsare:'foriinsys.argv:printprint'\n\nThePYTHONPATHis',sys.path,(源文件:code/using$$pythonusing_sys.pyweareargumentsThecommandlineargumentsare:'/usr/lib/python2.3','/usr/lib/python2.3/ 我們想要使用這個(gè)模塊。sysPythonPythonimportsyssys.path變量中所列中尋找sys.py模塊。如果找到了這個(gè)文件,這個(gè)模塊的主塊中的語句將被運(yùn)行,然后sysargv變量通過使用點(diǎn)號(hào)指明——sys.argv——這種方法的一個(gè)優(yōu)勢(shì)是這個(gè)名稱不會(huì)與任何在你的程序中使用的argv變量。另外,它也清晰地表明了這個(gè)名稱是sys模塊的一部分。pythonusing_sys.pywearearguments的時(shí)候,我們使序。Python為我們把它在sys.argv變量中。記住,的名稱總是sys.argv列表的第一個(gè)參數(shù)。所以,在這里,'using_sys.py'sys.argv[0]、'we'sys.argv[1]、'are'sys.argv[2]以及'arguments'sys.argv[3]。注意,Python01開始。sys.path包含輸入模塊的sys.path的第一個(gè)字符串是空的——這個(gè)空的字符串表示當(dāng)前也是sys.path的一部分,這與PYTHONPATH環(huán)境變量是相同的。這意味著你可以直接輸入位于當(dāng)前的模塊。否則,你得的模塊放在sys.path所列的之一。使輸入模塊更加快一些。法是創(chuàng)建字節(jié)編譯的文件,這些文件以.pyc作為擴(kuò)展名。字節(jié)編譯的文件與Python變換程序的中間狀態(tài)有關(guān)(是否還記得fromsysimportargvsys模塊使fromsysimport*語句。這對(duì)于所有模塊都適用。的程序更加易讀,也可以避免名稱的。的模塊輸入的時(shí)候不運(yùn)行主塊,我們?cè)撛趺醋瞿??這可以通過模塊的使用模塊的8.2#Filename:if =='mainprint'Thisprogramisbeingrunbyitself'print'Iambeingimportedfromanother(源文件:code/using$$pythonThisprogramisbeingrunby$>>>importIambeingimportedfromanother每個(gè)Python模塊都有它的name 模塊。你已經(jīng)確保它具有.py擴(kuò)展名了。下面這個(gè)例子將會(huì)使它更加清晰。#Filename:defprint'Hi,thisismymodulespeaking.'version='0.1'#Endof(記住這個(gè)模塊應(yīng)該被放置在我們輸入它的程序的同一 中,或者sys.path所 importmymoduleprint'Version',(源文件:code/mymodule$pythonmymodule_demo.pyHi,$pythonmymodule_demo.pyHi,thisismymodulespeaking.Version0.1號(hào)來,使我們這些Python程序員不需要不斷地學(xué)習(xí)新的方法。#Filename:frommymoduleimportsayhi,version#Alternative:#frommymoduleimportprint'Version',(源文件:code/mymoduledir()提供一個(gè)模塊名的時(shí)候,它返回模塊定義的名稱列表。如果不提供$>>>import>>>dir(sys)#getlistofattributesforsys dis excepthook'', '', ','_getframe','api_version', 'copyright','disyhook','exc_clear','exc_info','exc_type', 'tform', 'setprofile','setrecursionlimit','settrace','stderr','stdin',>>>dir()#getlistofattributesforcurrentmodule ',' ',' ','sys']>>>a=5#createanewvariable>>> ', ', ','a',>>>dela#delete/removea>>> ', ', ',dira并且給它賦一個(gè)值,然后檢驗(yàn)dirdel語句刪除當(dāng)前模塊中的變量/屬性,這個(gè)變化再一次反映在dir的輸出中。del一個(gè)變量/名稱。在這個(gè)例子中,dela,你將無法再使用變量a——它就好像從來沒有存在過一樣。模塊的用處在于它能為你在別的程序中重用它提供的服務(wù)和功能。Python接下來,學(xué)些有趣的概念,它們稱為數(shù)據(jù)結(jié)構(gòu)表用來一組相關(guān)數(shù)據(jù)的。list是處理一組有序項(xiàng)目的數(shù)據(jù)結(jié)構(gòu),即你可以在一個(gè)列表中一個(gè)序列的過在你的購物表上,可能每樣?xùn)|西都獨(dú)自占有一行,而在Python列表中的項(xiàng)目應(yīng)該包括在方括號(hào)中,這樣Python5,你可以認(rèn)為你創(chuàng)建了一個(gè)類(類型)int的對(duì)象(實(shí)例)i。事實(shí)上,你可以看一下help(int)以更好地理解這一點(diǎn)。才可以使用這些功能。例如,Pythonlistappend方法,這個(gè)方法才可以使用這些變量/名稱。類也通過點(diǎn)號(hào)使用,例如mylist.field。#Filename:#Thisismyshoplist=['apple','mango','carrot',print'Ihave',len(shoplist),'itemstoprint'Theseitemsare:',#Noticethecommaatendoftheforiteminprintprint'\nIalsohavetobuyrice.'print'My listisnow',print'Iwillsortmylistnow'print'Sorted listis',print'ThefirstitemIwillbuyis',shoplist[0]olditem=shoplist[0]delprint'Iboughtthe',print'My listisnow',(源文件:code/using$$pythonIhave4itemstoTheseitemsare:applemangocarrotbananaIalsohavetobuyrice.Myshop listisnow['apple','mango','carrot','banana',IwillsortmylistSortedshop listis['apple','banana','carrot','mango',ThefirstitemIwillbuyisappleIboughttheapple listisnow['banana','carrot','mango',apd的一樣。然后我們通過打印列表的內(nèi)容來檢驗(yàn)這個(gè)項(xiàng)目是否確實(shí)被添加進(jìn)列表pitsort方法來對(duì)列表排序。需要理解的是,這個(gè)方法這就是我們所說的列表是可變的而字符串是不可變的。個(gè)元素,因此我們使用delshoplist[0](記住,Python0開始計(jì)數(shù))。元組和列表十分類似,只不過元組和字符串一樣是不可變的即你不能修改元#Filename:zoo=('wolf','elephant',print'Numberofanimalsinthezoois',new_zoo=('monkey','dolphin',print'Numberofanimalsinthenewzoois',len(new_zoo)print'Allanimalsinnewzooare',new_zooprint'Animalsbroughtfromoldzooare',new_zoo[2]print'Lastanimalbroughtfromoldzoois',new_zoo[2][2](源文件:code/using$$pythonNumberofanimalsinthezoois3Numberofanimalsinthenewzoois3AllanimalsinAllanimalsinnewzooare('monkey','dolphin',('wolf','elephant','penguin')) Lastanimalbroughtfromoldzoois由于老動(dòng)物園關(guān)閉了,我們把動(dòng)物轉(zhuǎn)移到新動(dòng)物園。因此,new_zoo元組包含的元組不會(huì)失去它的。new_zoo[2]來new_zoo中的第三個(gè)項(xiàng)目。我們使用new_zoo[2][2]來new_zoo元組的Perl都是如此。只要是Python,它們就只是使用另一個(gè)對(duì)象的對(duì)例9.3使用元組輸出#Filename:age=name=print'%sis%dyearsold'%(name,print'Whyis yingwiththatpython?'%(源文件:code/print$pythonprint_tuple.pySwaroop$pythonprint_tuple.pySwaroopis22yearsoldWhyis yingwiththatprint語句可以使用跟著%符號(hào)的項(xiàng)目元組的字符串。這些字符串具備定制的功能。定制讓輸出滿足某種特定的格式。定制可以是%s表示字符串或%d表示整觀察我們使用的第一個(gè)元組,我們首先使用%sname,它是元組中的第一個(gè)項(xiàng)目。而第二個(gè)定制是%d,它對(duì)應(yīng)元組的第二個(gè)項(xiàng)目age。Python換定制的位置。因此%s被替換為變量name的值,依此類推。print的這個(gè)用法使得編寫輸出變得極其簡單,它避免了許多字符串操作。它也在大多數(shù)時(shí)候,你可以只使用%sPython鍵值對(duì)在字典中以這樣的方式標(biāo)記:d={key1:value1,key2:value2}。注意#Filename:#'ab'isshortforab={ :'larry@','Matsumoto':'matz@','Spammer':'s }print"Swaroop'saddressis%s"%#Addingakey/valuepair#Addingakey/valuepair#Deletingakey/valuepairdelab['Spammer']print'\nThereare%dcontactsintheaddress-book\n'%forname,addressinprint'Contact%sat%s'%(name,if'Guido'inab:#ORprint"\nGuido'saddressis%s"%(源文件:code/using$$pythonSwaroop'saddressisThereare4contactsintheaddress-ContactSwaroopatswaroopch@ContactMatsumotoatmatz@ContactLarryatlarry@ContactGuidoatGuido'saddressisab。然后我們使用在列表和元組章節(jié)中值對(duì),就像在上面的例子中我們對(duì)Guido所做的一樣。我們可以使用我們的——del語句來刪除鍵/值對(duì)。我們只需要指明字典我們可以使用in操作符來檢驗(yàn)一個(gè)鍵/值對(duì)是否存在,或者使用dict術(shù)語中被稱作符號(hào)表)。#Filename:shoplist=['apple','mango','carrot','banana']#Indexingor'Subscription'operationprint'Item0is',shoplist[0]print'Item1is',shoplist[1]print'Item2is',shoplist[2]print'Item3is',shoplist[3]print'Item-1is',shoplist[-1]print'Item-2is',shoplist[-#Slicingonaprint'Item1to3is',shoplist[1:3]print'Item2toendis',shoplist[2:]print'Item1to-1is',shoplist[1:-1]print'Itemstarttoendis',shoplist[:]#Slicingonastringname='swaroop'print'characters1to3is',name[1:3]print'characters2toendis',name[2:]print'characters1to-1is',name[1:-1]print'charactersstarttoendis',name[:]($$pythonseq.pyItem0isappleItem1ismangoItem2iscarrotItem3isbananaItem-1isItemItem-2isItem1to3is['mango','carrot']Item2toendis['carrot','banana']Item1to-1is['mango','carrot']Itemstarttoendis['apple','mango','carrot','banana']characters1to3iswacharacters2toendisaroopcharacters1to-1iswaroocharactersstarttoendisswaroop作。每當(dāng)你用方括號(hào)中的一個(gè)數(shù)來指定一個(gè)序列的時(shí)候,Python會(huì)為你抓取序一個(gè)項(xiàng)目,shoplist[3]抓取shoplist序列中的第四個(gè)元素。shoplist[-1]表示序列的最后一個(gè)元素而shoplist[-2]抓取序列的倒數(shù)第二個(gè)項(xiàng)后)表示切片到哪里結(jié)束。如果不指定第一個(gè)數(shù),Python就從序列首開始。如到結(jié)果。序列的神奇之處在于你可以用相同的方法元組、列表和字符串。#Filename:print'Simpleshoplist=['apple','mango','carrot',mylist=shoplist#mylistisjustanothernamepointingtothesameobject!delprint'shoplistis',shoplistprint'mylistis',mylist#noticethatbothshoplistandmylistbothprintthesamelistwithout#the'apple'confirmingthattheypointtothesameprint'Copybymakingafullslice'mylist=shoplist[:]#makeacopybydelmylist[0]#removefirstngafullprint'shoplistis',printprint'mylistis',#noticethatnowthetwolistsare(SimpleAssignmentshoplistis['mango','carrot','banana']mylistis['mango','carrot','banana']Copybymakingafullshoplistis['mango','carrot','banana']mylistis['carrot','banana']都參考同一個(gè)對(duì)象,那么如果你不的話,可能會(huì)引來各種麻煩。這個(gè)例子中說明。如果要了解這些方法的完整列表,請(qǐng)參見help(str)。#Filename:name='Swaroop'#Thisisastringifprint'Yes,thestringstartswithif'a'inprint'Yes,itcontainsthestringifname.find('war')!=-print'Yes,itcontainsthestringdelimiter=mylist=['Brazil','Russia','printdelimiter.join(mylist)',($$pythonYes,thestringstartswith"Swa"Yes,itcontainsthestring"a"Yes,itcontainsthestring"war" 這里,我們看到使用了許多字符串方法。startwith方法是用來測(cè)試字符串是否以給定字符串開始。in操作符用來檢驗(yàn)一個(gè)給定字符串是否為另一個(gè)字符串的find方法用來找出給定字符串在另一個(gè)字符串中的位置,或者返回-1寫一個(gè)實(shí)用的Python程序。表容結(jié)合起來。設(shè)計(jì)編寫一個(gè)能夠做一些確實(shí)有用的事情的程序。如何讓它工作。如果是你設(shè)計(jì)的話,你可能不會(huì)這樣來解決問題——每個(gè)人 中我們使用標(biāo)準(zhǔn)的zip命令,它通常默認(rèn)地隨Linux/Unix版提供。#Filename:import#1.Thefilesanddirectoriestobebackeduparespecifiedinalist.source=['/home/swaroop/byte',#IfyouareusingWindows,usesource=[r'C:\ r'D:\Work']orsomethinglikethat#2.Thebackupmustbestoredinamainbackupdirectorytarget_dir='/mnt/e/backup/'#Remembertochangethiswhatyouwillbe#3.Thefilesarebackedupintoazip#4.Thenameoftheziparchiveisthecurrentdateandtimetarget=target_dir+time.strftime('%Y%m%d%H%M%S')#5.Weusethezipcommand(inUnix/Linux)toputthefilesinaziparchivemand="zip-qr'%s'%s"%(target,'#Runtheifmand)==print'Successfulbackupto',targetprint'Backup(源文件:code/backup$$pythonSuccessfulbackupto瑕疵(錯(cuò)誤)。指定需要備份的文件和。目標(biāo)是我們想要備份文件的地方,它由target_dir變量指定。zip歸檔的名稱是目前的日期和時(shí)間,我們使用time.strftime()函數(shù)獲得。它還包括.ziptarget_dir中。time.strftime()函數(shù)需要我們?cè)谏厦娴某绦蛑惺褂玫哪欠N定制。%Y會(huì)被無世紀(jì)這些定制的詳細(xì)情況可以在《PythonPython包含在你的Python版中。注意這些定制與用于print語句的定制(%后跟字符串。通過這種方式,我們創(chuàng)建了目標(biāo)zip文件的名稱。接著我們創(chuàng)建了mand字符串,它包含要執(zhí)行令。你可以在s DOS)zip命令對(duì)遞歸地工作,即它包括子以及子中的文件。兩個(gè)選項(xiàng)可以組合成縮寫形式-qrzip份的文件和joinsource列表轉(zhuǎn)os.system中 如,使用 s'或 s'而不 可以在任何地方任何時(shí)候運(yùn)行備份了。這被稱為軟件的實(shí)施環(huán)節(jié)或開發(fā)環(huán)作為名,存放在主備份中。這樣做的一個(gè)優(yōu)勢(shì)是你的備份會(huì)以等創(chuàng)建了備份,因?yàn)橹挥性谀銊?chuàng)建了備份,才會(huì)出現(xiàn)那天的。10.2#Filename:importos#1.Thefilesanddirectoriestobebackeduparespecifiedinalist.source=['/home/swaroop/byte',#IfyouareusingWindows,usesource=[r'C:\ r'D:\Work']orsomethinglikethat#2.Thebackupmustbestoredinamainbackupdirectorytarget_dir='/mnt/e/backup/'#Remembertochangethistowhatyouwillbeusing#3.Thefilesarebackedupintoazip#4.Thecurrentdayisthenameofthesubdirectoryinthemaindirectorytoday=target_dir+#Thecurrenttimeisthenameoftheziparchivenow=time.strftime('%H%M%S')#Createthesubdirectoryifitisn'talreadythereifnotos.path.exists(today):os.mkdir(today)#makeprint'Successfullycreateddirectory',#Thenameoftheziptarget=today+os.sep+now+#5.Weusethezipcommand(inUnix/Linux)toputthefilesinaziparchivemand="zip-qr'%s'%s"%(target,''.join(source))#Runthebackupififmand)==print'Successfulbackupto',targetprint'Backup($$pythonSuccessfullycreateddirectory/mnt/e/backup/Successfulbackupto/mnt/e/backup/ $pythonSuccessfulbackupto份中是否有以當(dāng)前日期作為名稱的。如果沒有,我們使用os.mkdir函注意os.sep變量的用法——這會(huì)根據(jù)你的操作系統(tǒng)給出分隔符,即在稿做了一些重要的改變,于是要把這些改變與zip歸檔的名稱聯(lián)系起例10.3備份 #Filename:importos#1.Thefilesanddirectoriestobebackeduparespecifiedinalist.source=['/home/swaroop/byte',#IfyouareusingWindows,usesource=[r'C:\ r'D:\Work']orsomethinglikethat#2.Thebackupmustbestoredinamainbackupdirectorytarget_dir='/mnt/e/backup/'#Remembertochangethistowhatyouwillbeusing#3.Thefilesarebackedupintoazip#4.Thecurrentdayisthenameofthesubdirectoryinthemaindirectorytoday=target_dir+#Thecurrenttimeisthenameoftheziparchivenow=time.strftime('%H%M%S')#Takeacommentfromtheusertocreatethenameofthezipfilecomment=raw_input('Enteracomment-->iflen(comment)==0:#checkifacommentwasenteredtarget=today+os.sep+now+'.zip'target=today+os.sep+now+'_'+comment.rece('','_')+'.zip'#Createthesubdirectoryifitisn'talreadythereifnotos.path.exists(today):os.mkdir(today)#makeprint'Successfullycreateddirectory',##5.Weusethezipcommand(inUnix/Linux)toputthefilesinaziparchivemand="zip-qr'%s'%s"%(target,'#Runtheifmand)==print'Successfulbackupto',targetprint'Backup(源文件:code/backup$$pythonFile"backup_ver3.py",line25target=today+os.sep+now+'_'+錯(cuò)誤的位置。所以我們從那行開始調(diào)試我們的程序。明這兩個(gè)物理行屬于同一邏輯行?;旧希琍ython(+)在那10.4#Filename:importos#1.Thefilesanddirectoriestobebackeduparespecifiedinalist.source=['/home/swaroop/byte',#IfyouareusingWindows,usesource=[r'C:\ r'D:\Work']orsomethinglikethat#2.Thebackupmustbestoredinamainbackupdirectorytarget_dir='/mnt/e/backup/'#Remembertochangethistowhatyouwillbeusing#3.Thefilesarebackedupintoazip#4.Thecurrentdayisthenameofthesubdirectoryinthemaindirectorytoday=target_dir+#Thecurrenttimeisthenameoftheziparchivenow=time.strftime('%H%M%S')#Takeacommentfromtheusertocreatethenameofthezipfilecomment=raw_input('Enteracomment-->iflen(comment)==0:#checkifacommentwasenteredtarget=today+os.sep+now+'.zip'target=today+os.sep+now+'_'+\comment.rece('','_')+'.zip'#Noticethe#Createthesubdirectoryifitisn'talreadythereifnotos.path.exists(today):os.mkdir(today)#makeprintprint'Successfullycreateddirectory',#5.Weusethezipcommand(inUnix/Linux)toputthefilesinaziparchivemand="zip-qr'%s'%s"%(target,'#Runtheifmand)==print'Successfulbackupto',targetprint'Backup($$pythonEnteracomment-->addednewEnteracomment-->Successfulbackupto這個(gè)程序現(xiàn)在工作了!讓我們看一下版本三中作出的實(shí)質(zhì)性改進(jìn)。我們使用zip.zip注意我們把注釋中的空格替換成下劃線——這是因?yàn)樘幚磉@樣的文件名要容易得多。程度——你可以用-v選項(xiàng)來另一個(gè)可能的改進(jìn)是使文件和能夠通過命令行直接傳遞給。我們可以通sys.argvlistextend方法把它們加到source列表中去。系統(tǒng)中都是默認(rèn)可用的。Windows用戶也可以安裝它。tartar='tar-cvzf%s%s-X/home/swaroop/excludes.txt'%(target,''.join(srcdir))-X表示含在指定文件名列表中的文件會(huì)被排除在備份之外。例如,你可zipfiletarfile。它們Pythonos.system這個(gè)不推薦使用的函數(shù),它容易嚴(yán)重的錯(cuò)誤。os.system的方法來創(chuàng)建備份,這純粹是什么(分析如何(設(shè)計(jì)編寫(實(shí)施測(cè)試(測(cè)試與調(diào)試使用(實(shí)施或開發(fā)(優(yōu)化 讓你對(duì)Python以及解決問題都變得更加得心應(yīng)手。接下來 表對(duì)象可以使用普通的屬于對(duì)象的變量數(shù)據(jù)。屬于一個(gè)對(duì)象或類的變量被稱參數(shù)名稱,但是在調(diào)用這個(gè)方法的時(shí)候你不為這個(gè)參數(shù)賦值,Python會(huì)提供這個(gè)值。這個(gè)特別的變量指對(duì)象本身,按照慣例它的名稱是self。雖然你可以給這個(gè)參數(shù)任何名稱,但是強(qiáng)烈建議你使用self這個(gè)名稱——其會(huì)使此變得清晰。假如你有一個(gè)類稱為MyClass和這個(gè)類的一個(gè)實(shí)例MyObjectMyObject.method(arg1arg2)的時(shí)候,PythonMyClass.method(MyObjectarg1,arg2)——這就是self的原理了。類#Filename::pass#Anemptyppprint($$python<main instanceat塊形成類體。在這個(gè)例子中,我們使用了一個(gè)空白塊,它由pass語句表示。接下來,我們使用類名后跟一對(duì)圓括號(hào)來創(chuàng)建一個(gè)對(duì)象/實(shí)例。(在下面變量的類型。它告訴我們我們已經(jīng)在main模塊中有了一個(gè)類的實(shí)會(huì)是另外一個(gè)值,因?yàn)镻ython可以在任何空位對(duì)象。是一個(gè)額外的self變量?,F(xiàn)在我們來學(xué)個(gè)例子。defdefprinto,howarep #Thisshortexamplecanalsobewritten($$pythonmethod.pyo,howare義時(shí)有self。init在Python的類中有很多方法的名字有特殊的重要意義現(xiàn)在學(xué)習(xí) 象做一些你希望的初始化。注意,這個(gè)名稱的開始和結(jié)尾都是雙下劃線。使用 11.3init#Filename: init(self,name):=namedefprint o,mynameis',p (源文件:code/class$$pythono,mynameis這里,我們把initname(self)。在這個(gè)init里,我們只是創(chuàng)建一個(gè)新的域,也稱為name。注

溫馨提示

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