




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Lesson 1 準(zhǔn)備好學(xué)習(xí)Python的環(huán)境下載的地址是: linux版本的我就不說(shuō)了,因?yàn)槿绻隳軌蚴褂胠inux并安裝好說(shuō)明你可以一切自己搞定的。運(yùn)行環(huán)境可以是linux或者是windows:1、linuxredhat的linux安裝上去之后一定會(huì)有python的(必須的組件),在命令行中輸入python回車。這樣就可以進(jìn)入一個(gè)>>>的提示符2、windows安裝好了python之后,在開(kāi)始菜單里面找到Python2.3->IDLE,運(yùn)行也會(huì)進(jìn)入一個(gè)有>>>提示符的窗口開(kāi)始嘗試Python1、輸入:welcome = "Hello!&q
2、uot;回車然后又回到了>>>2、輸入:print welcome回車然后就可以看到你自己輸入的問(wèn)候了。Lesson 2 搞定環(huán)境之后的前行Python有一個(gè)交互式的命令行,大家已經(jīng)看到了吧。所以可以比較方便的學(xué)習(xí)和嘗試,不用“新建存檔編譯調(diào)試”,非常適合快速的嘗試。一開(kāi)始從變量開(kāi)始(其實(shí)說(shuō)變量,更準(zhǔn)確的是對(duì)象,Python中什么都可以理解為對(duì)象)。變量welcome = "hello!"welcome就是變量名,字符串就是變量的類型,hello!就是變量的內(nèi)容,""表示這個(gè)變量是字符串,""中間的是字符串的內(nèi)容。熟
3、悉其他語(yǔ)言的人,特別是編譯類型的語(yǔ)言,覺(jué)得沒(méi)有變量的聲明很奇怪。在python中用賦值來(lái)表示我要這么一個(gè)變量,即使你不知道要放什么內(nèi)容,只是要先弄一個(gè)地方來(lái)放你的東西,也要這么寫(xiě):store = ""不過(guò)這個(gè)還是說(shuō)明了store是字符串,因?yàn)?quot;"的緣故。have a try 代碼: tmp_storage = ""welcome = "hello!"tmp_storage = welcomeprint tmp_storage你會(huì)發(fā)現(xiàn)同樣的問(wèn)候出現(xiàn)了。字符串字符串是用"&qu
4、ot;標(biāo)記的,但是用''也可以(不要說(shuō)你看不出一個(gè)是雙引號(hào),一個(gè)是單引號(hào)),兩者之間是有一丁點(diǎn)區(qū)別,不過(guò)你可以不用理會(huì)。其實(shí)是差不多的。字符串有很多自己的操作,最常用的是這樣的: 代碼: welcome = "hello"you = "world!"print welcome+you運(yùn)行之后就會(huì)發(fā)現(xiàn)她輸出了helloworld!。更多變量變量還有幾種類型。數(shù)字符串列表字典文件勿庸置疑,這些都是非常非常常用的。對(duì)于數(shù)字就不用講了那就是: 代碼: radius = 1
5、0pi = 3.14area = pi*radius*2print "the area is", area下次講列表和字典Lesson 3 Python中的數(shù)學(xué)結(jié)構(gòu)數(shù)學(xué)中你學(xué)什么東西最多遍?我想根據(jù)我的一點(diǎn)淺薄經(jīng)驗(yàn)(雖然我是數(shù)學(xué)系的),學(xué)得最多的是集合,無(wú)論什么數(shù)學(xué)書(shū)都從集合開(kāi)始講起。然后講函數(shù)呢,又必然把映射再講一遍??梢哉f(shuō),集合和映射是數(shù)學(xué)中最基本的結(jié)構(gòu)了。Python對(duì)于數(shù)據(jù)結(jié)構(gòu)非常明智的內(nèi)置了兩個(gè),回想我寫(xiě)C的程序,往往是一開(kāi)始就是用struct拼一個(gè)鏈表出來(lái)(重復(fù)勞動(dòng))。Python中提供了列表(list)和字典(dict)兩種數(shù)據(jù)結(jié)構(gòu)。他們分別對(duì)應(yīng)的原型是集合和
6、映射。這個(gè)你應(yīng)該明白了,只是表示方法有一點(diǎn)不一樣而已。列表列表的英文名是list嘛,所以我取一個(gè)名字叫 代碼: my_list = 這個(gè)就產(chǎn)生了一個(gè)空的列表。然后給它賦值my_list = 1,2print my_listmy_list.append(3)print my_list非常容易明白的。append前面加了一個(gè)點(diǎn),這個(gè)表示append是my_list方法。我實(shí)在不想又去給你解釋什么是對(duì)象,什么是成員方法,然后扯出一大段出來(lái)。list是可以索引的:print my_list1不過(guò)你或許會(huì)不明白為什么是2,而不是顯示的是1。因?yàn)樗饕龔?開(kāi)始,要輸出第一個(gè)元
7、素:print my_list0字典 代碼: contact = 這個(gè)產(chǎn)生了一個(gè)空字典,contact。然后往里面填充內(nèi)容: 代碼: contact=contact"name"="taowen"contact"phone"=68942443name就是你查字典的時(shí)候要查找的單詞,taowen就是查到的內(nèi)容。不過(guò)你現(xiàn)在不是查,而是在寫(xiě)這個(gè)字典。同理添加了phone這個(gè)詞條?,F(xiàn)在添加好了,看看contact的內(nèi)容,怎么查看?自己想辦法吧。如果你悟性夠,就會(huì)發(fā)現(xiàn)python很多
8、操作是通用的,既然能夠print 1, print "", print my_list,那么其他數(shù)據(jù)類型的變量就沒(méi)有理由不能用了。結(jié)合列表和字典 代碼: contact_list=contact1=contact1'name'='taowen'contact1'phone'=68942443contact_list.append(contact1)contact2=contact2'name'='god'contact2'phone'=444488
9、88contact_list.append(contact2)呵呵,夠復(fù)雜的吧。你可以想出我為什么要用兩個(gè)contact字典呢?。Lesson 4 用不同的方式來(lái)操作Python到現(xiàn)在為止,我們用的都是交互式的命令行來(lái)操作的,的卻是很方便,是吧?不過(guò),復(fù)雜一些的情況就不那么好使了,來(lái)?yè)Q一種方式來(lái)操作Python在IDLE中點(diǎn)擊File->New Window,出現(xiàn)一個(gè)新窗口(對(duì)于linux下,你要用vim或者emacs或者pico把文本的源文件寫(xiě)好了)。為了方便,先點(diǎn)擊File->Save,填入my_try.py。這樣能夠讓編輯器知道在編輯python的源文件,會(huì)把你輸入的代碼進(jìn)行
10、一點(diǎn)上色的處理。填入下面的代碼: 代碼:i = 5n = 0while i>0: n = n + i i = i - 1print n你會(huì)發(fā)現(xiàn)輸入:之后,自動(dòng)會(huì)給縮進(jìn)。而且也沒(méi)有在python中發(fā)現(xiàn)和C/C+中類似的標(biāo)記也沒(méi)有pascal中的beginend;,其實(shí)縮進(jìn)就是python中表示一段代碼的從屬關(guān)系的標(biāo)記方法。表示n=n+1和i=i-1這兩句都是while的。程序的運(yùn)行邏輯應(yīng)該不用解釋了吧。就是運(yùn)行5+4+3+2+1的結(jié)果。運(yùn)行代碼按F5,可能提示你沒(méi)有存盤,照著辦就是了。發(fā)揮你的能力,計(jì)算從1到10的所
11、有偶數(shù)的和(提示,可能沒(méi)有你想象的那么智能)。Lesson 5 Python中的輸入與判斷健全的程序大凡都需要輸入的功能,所以要學(xué)習(xí)一下簡(jiǎn)單的輸入:輸入要使用的是raw_input或者input函數(shù),區(qū)別是raw_input直接把你的輸入作為字符串返回,而input則在raw_input的基礎(chǔ)上把字符串轉(zhuǎn)換為數(shù)字返回(如果你輸入$#$怎么辦?自己試試看)。我們就利用這兩個(gè)輸入函數(shù)來(lái)作一些有趣的事情。 代碼: your_name = raw_input("please input your name:")hint = "welcome
12、! %s" % your_nameprint hint不簡(jiǎn)單吧,還有%呢。%s表示在這個(gè)位置插入一個(gè)字符串,%表示把后面提供的參數(shù)“推”入前面的字符串中,所以推的結(jié)果是把%s推出去了,把your_name給填入那個(gè)地方了。printf知道吧,C中的printf就是一樣的嘛。 代碼: inputed_num = 0while 1: inputed_num = input("input a number between 1 and 10n") if inputed_num
13、>= 10: pass elif inputed_num < 1: pass else: breakprint "hehe, don't follow, won't out"pass就是pass了,過(guò)了嘛,什么都不干了。break就是跳出這個(gè)while 1(無(wú)窮循環(huán),1總是真的
14、,while總是執(zhí)行)。n是換行,不會(huì)全部忘光了吧。Lesson 6 Python余興節(jié)目代碼: from Tkinter import *root = Tk()w = Label(root, text="Hello, world!")w.pack()root.mainloop()呵呵,一次太超前了一點(diǎn),不過(guò)也不是解釋不清楚。我干脆也不解釋了吧。給大家增進(jìn)一點(diǎn)興趣。還是解釋一下fromt Tkinter import *是引入一個(gè)模塊,這個(gè)模塊用來(lái)創(chuàng)建GUI(Graphic User Interface)窗口Tk()創(chuàng)建了一個(gè)主窗口Label()創(chuàng)建一
15、個(gè)標(biāo)簽Label的第一個(gè)參數(shù)是root表明Label是在這個(gè)主窗口中的。w.pack()是指用缺省的方式把Label放置在主窗口中root.mainloop()開(kāi)始了一個(gè)循環(huán),是等待你的輸入的循環(huán)。Lesson 7 Python基本語(yǔ)法要素齊動(dòng)員現(xiàn)在的目的是盡量想出一個(gè)用的東西僅限于內(nèi)置的變量類型和語(yǔ)句的一個(gè)綜合的例子,我想還是那個(gè)聯(lián)系人表的例子吧 代碼:#呵呵,還忘記了講注釋#第一個(gè)算是完整的程序#contact = contact_list = while 1: contact'name' = raw_input("
16、please input name: ") contact'phone' = raw_input("please input phone number: ") contact_list.append(contact.copy() go_on = raw_input("continue?n") if go_on = "yes": pas
17、s elif go_on = "no": break else: print "you didn't say non"i = 1for contact in contact_list: print "%d: name=%s" % (i, contact'name')
18、; print "%d: phone=%s" % (i, contact'phone') i = i + 1首先是回憶一下字符串字符串既能夠用""也能夠用''。然后是很有特色的%操作,起到格式化字符串的作用,前面僅僅在字符串中有一個(gè)%s,現(xiàn)在有%d和%s兩個(gè),分別代表插入十進(jìn)制數(shù)值和字符串于%x標(biāo)記的位置處。然后是列表列表是順序的序列,用append在后面附加,也能構(gòu)用索引值索引。所以我們完全可以用一個(gè)變量保存len(contact_list)得到的長(zhǎng)度,然后一個(gè)個(gè)的遍歷,不過(guò)這里展示了另外一種非
19、常方便的方法。而且值得注意的是append()中的參數(shù),我使用了contact.copy(),你可以嘗試著把copy()給去掉,觀察結(jié)果你就知道了所謂的append是怎么干的了,特別是你對(duì)指針之類的東西很有感覺(jué)的話(但是在Python中是沒(méi)有指針這個(gè)概念的)再來(lái)看看字典字典是鍵(key)和值(value)的對(duì)應(yīng)組合成的無(wú)序的序列。所以你存的時(shí)候要指明鍵(name或者phone),而且取的時(shí)候也是一樣的。接下來(lái)是判斷if是很好用的,=表示判斷兩個(gè)是否相等,=表示把右邊的賦給左邊的。而且可以直接判斷字符串是否相等,這個(gè)太方便了,如果你曾經(jīng)用過(guò)strcpy()的話,就知道了。elif是表示else
20、if的意思,如果if不滿足就判斷elif的條件是否滿足,最后是到else中去。循環(huán)是個(gè)主體while和for都是循環(huán)。不過(guò)這里while就沒(méi)什么說(shuō)的了,又是很經(jīng)典的while 1,死循環(huán),然后必須在里面用break來(lái)跳出。for和C中的for是不一樣的,for in才是一個(gè)完整的語(yǔ)句,指的是從一個(gè)能夠逐一取值的序列中(比如list),一個(gè)一個(gè)的取出值賦給for后面指定的變量中,直到取空,循環(huán)結(jié)束。其實(shí)回想一般用C中的for的經(jīng)歷,也大體如此。而且你還可以用for i in range(1,100)來(lái)指定一個(gè)范圍從多少到多少??梢哉f(shuō)for in充分體現(xiàn)了python的體貼周到,用起來(lái)很直觀,不會(huì)
21、繞彎。接下來(lái)就是運(yùn)行了,大家慢慢調(diào)試吧。下次可能是講異常處理,因?yàn)槲矣X(jué)得在深入到使用各種高級(jí)的要素之前,先要學(xué)會(huì)怎么去處理異常。最常見(jiàn)的異常應(yīng)該是input(),然后你給出的輸入是一個(gè)無(wú)法轉(zhuǎn)換為數(shù)字的字符串了,那么我們就要來(lái)處理它。Lesson 8 Python中的錯(cuò)誤檢測(cè)寫(xiě)程序什么最重要?完成功能最重要。但是程序中難免要有用戶的輸入,對(duì)于這些寫(xiě)的時(shí)候未可預(yù)知的因素中間可能出現(xiàn)的錯(cuò)誤,一般稱作異常。對(duì)于異常情況的處理,不同語(yǔ)言有不同的做法,比如檢查函數(shù)的返回值之類的,但是那種辦法會(huì)把代碼弄成一團(tuán)漿糊。Python在這個(gè)方面是比較先進(jìn)的,我們從一個(gè)例子來(lái)看看: 代碼:
22、60; print input()呵呵,看不同吧。其實(shí)input是輸入,print是輸出。也就是把輸入的東西立即輸出。但是這個(gè)和 代碼:print raw_input()有什么不同呢?不同的地方是,input()會(huì)在raw_input()接收了“字符串”的輸入之后進(jìn)行一些處理,比如你是輸入1+2,然后輸出的就是3了,而raw_input就是原原本本的1+2的輸出了。用代碼表示就是 代碼: eval(raw_input()eval是求表達(dá)式的值,任何一個(gè)簡(jiǎn)單的python表達(dá)式,就像1+2這樣的作為字符串送入,就能把值從
23、eval處理之后取出來(lái)?,F(xiàn)在你實(shí)驗(yàn)一下"sdfsdf”之后,你會(huì)發(fā)現(xiàn)提示你 引用:Traceback (most recent call last): File "<pyshell#4>", line 1, in -toplevel- input() File "<string>", line 0, in -toplevel-NameError: name 'sdfsdf' is not defined如果輸入其他
24、稀奇古怪的字符串還可能有其他的出錯(cuò)提示,我們現(xiàn)在要做的就是捕捉這種由用戶輸入引起的錯(cuò)誤。這么來(lái)作: 代碼: try: print input()except: print 'there is an error in your input'這下你無(wú)論怎么輸入都不會(huì)有什么其他的提示了,就是自己設(shè)定的print語(yǔ)句作為提示?,F(xiàn)在把try except的組合去掉,回到print input()你再嘗試一下:1/0這個(gè)顯然是一個(gè)錯(cuò)誤,被零除的錯(cuò)誤。那么專門來(lái)捕捉一下這個(gè)錯(cuò)誤:
25、60;代碼: try: print input()except ZeroDivisionError: print 'can not be divided by zero'這下你能夠捕捉到被零除的錯(cuò)誤了。然后你再嘗試其他的輸入,可能錯(cuò)誤就沒(méi)有被捕捉了。所以再補(bǔ)上: 代碼:try: print input()except ZeroDivisionError: print 'can not be divided by zero'exc
26、ept: print 'there is an error in your input'注意,捕捉所有錯(cuò)誤的except必須放在所有的except的最后一位。明白了?OK還有更多的能夠捕捉的錯(cuò)誤,自己查手冊(cè)吧(暫時(shí)看不了手冊(cè)沒(méi)關(guān)系,慢慢來(lái)嘛)。以后還能夠自己raise(引發(fā))異常呢。不過(guò)那都是比較高級(jí)的應(yīng)用了,對(duì)于出錯(cuò)處理從一開(kāi)始就有這個(gè)印象,并牢記在心中對(duì)于以后寫(xiě)大一些的軟件很有好處。Lesson 9 走向模塊化的第一步大規(guī)模的程序設(shè)計(jì)需要你把一個(gè)大的程序拆分成n個(gè)模塊。然后把模塊進(jìn)行組合,交互成為一個(gè)完整的程序。你不可能像現(xiàn)在這樣,從頂寫(xiě)到尾。那么
27、我們從函數(shù)開(kāi)始。 代碼:def square(x): return x*2print square(5)簡(jiǎn)單吧,這個(gè)是我看過(guò)的函數(shù)定義中最簡(jiǎn)潔的。def表示這個(gè)開(kāi)始定義一個(gè)函數(shù),x是參數(shù),參數(shù)是不需要類型的,因?yàn)閜ython是不需要明確指出類型的。return是返回值,返回的值插入到調(diào)用函數(shù)的地方。再?gòu)?fù)雜一些 代碼:def multiply(a, b): return a*bprint multiply(1,2)這是兩個(gè)參數(shù)的函數(shù)。那么返回兩個(gè)值呢? 代碼:def swap(a
28、, b): return (b,a)print swap(1,2)呵呵,其實(shí)這里返回的并不是兩個(gè)值,而是一個(gè)值。怎么說(shuō)呢。(b, a)就是一個(gè)東西,是一個(gè)元組(turple),你可以用這樣的方式成生一個(gè)元組,并使用它。元組是基本的變量類型: 代碼:my_turple = (1, 2, 3)my_list = for i in my_turple: my_list.append(i)print my_list其實(shí)元組和列表非常像,但是列表的長(zhǎng)度是可以變化的,而且成員是可以改變的。但是元組是什么都不能變的,是只讀的。對(duì)于高級(jí)
29、一點(diǎn)的話題:傳遞進(jìn)來(lái)的參數(shù)是否可以被修改,這個(gè)問(wèn)題取決于你傳遞了什么近來(lái)。如果是數(shù)字或者字符串,是不能夠改變的,但是如果是這樣的: 代碼:def test_func(list_be_passed): list_be_passed0 = 'towin'my_list = 'taowen'print my_listtest_func(my_list)print my_list就能夠改變傳遞近來(lái)的參數(shù)了,所以處理的時(shí)候要小心,必要的時(shí)候copy一下再傳遞。函數(shù)簡(jiǎn)單吧,但是很好用的。想起C中的函數(shù)那么那么多麻煩,真是感慨萬(wàn)
30、千啊。下面是應(yīng)該講GUI編程呢,還是面向?qū)ο竽??思考一下Lesson 10 Python的文件操作文件操作.是一個(gè)語(yǔ)言和外界聯(lián)系的主要方法.現(xiàn)在以txt為例簡(jiǎn)單的講一下.首先是建立關(guān)聯(lián).假設(shè)在存在以下文件 c:a.txt 代碼:This is line #1This is line #2This is line #3END 代碼:>>> xxx = file('c:a.txt', 'r')關(guān)鍵字的第一部分,是文件路徑及名稱。注意這里面,路徑需要用第二部分,是對(duì)文件的模式或者叫權(quán)限,一般有以下3種 &q
31、uot;r" (read), "w" (write)和 "a"(append).之后,就可以利用xxx_content = infile.read()xxx_content = infile.readlines()來(lái)讀取文件內(nèi)容了 代碼:>>> xxx = file('c:a.txt', 'r')>>> xxx_content = xxx.read()>>> print xxx_contentThis is line #1This is
32、line #2This is line #3END>>> xxx.close()>>>>>> infile = file('c:a.txt', 'r')>>> xxx = file('c:a.txt', 'r')>>> for xxx_line in xxx.readlines(): print 'Line:', xxx_line &
33、#160; Line: This is line #1Line: This is line #2Line: This is line #3Line: END>>> xxx.close()>>> 然后是文件的寫(xiě)入 代碼:>>> xxx=file('c:test.txt','w')>>> xxx.write('billrice')>>> xxx.write('testtest')>>> xxx.write(
34、'entern')>>> xxx.writelines('billrice','ricerice')>>> xxx.close()>>>>>> xxx=file('c:test.txt','r')>>> content=xxx.read()>>> print contentbillricetesttestenterbillricericerice>>> 需要注意的是.在xxx.close()
35、之前,c盤下面只有一個(gè)空空的test.txt,xxx.close()的作用相當(dāng)于最后的存盤。Lesson 11 走向模塊化的第二步函數(shù)上面還能是什么呢??jī)?nèi)嵌函數(shù)_,其實(shí)python是支持的。不過(guò)用起來(lái)會(huì)讓你吐血的,LGB名稱查找規(guī)則。(寒)。python是面向?qū)ο蟮?,?duì)于面向?qū)ο蟮闹С滞猛娴摹?#160; 代碼:class person: def _init_(self): = 'taowen' &
36、#160; self.id = 20022479 def say_id(self): print "%s's id is %d" % (, self.id)me = person()me.say_id()比較復(fù)雜了吧。如果不熟悉面向?qū)ο蟮母拍畹?,可能?huì)覺(jué)得暈。我來(lái)解釋一下。所謂面向?qū)ο笫前褦?shù)據(jù)和操作數(shù)據(jù)的函數(shù)放到同一個(gè)類中去,然后用類來(lái)創(chuàng)建對(duì)象,操作的時(shí)候能夠比較方便(很不精確的說(shuō)法,任何一個(gè)OO高手都可以把我罵得屁都不是)。類類是clas
37、s關(guān)鍵來(lái)定義的。class person:就是說(shuō)定義一個(gè)類,名字叫person。對(duì)象對(duì)象是用類來(lái)產(chǎn)生的。所以me就是對(duì)象,產(chǎn)生的辦法就是像調(diào)用函數(shù)一樣,person(),而且()中是能夠放參數(shù)的,什么時(shí)候要參數(shù),看下面的“初始化函數(shù)“初始化函數(shù)類可以有自己的初始化函數(shù),每次類被創(chuàng)建的時(shí)候(調(diào)用person()這樣的語(yǔ)句的時(shí)候),都會(huì)調(diào)用它。這個(gè)在C+中的名稱是構(gòu)造函數(shù)。_init_是必須的名字,你不能用其他名字來(lái)當(dāng)初始化函數(shù)。但是你可以沒(méi)有初始化函數(shù)。類的數(shù)據(jù)類的數(shù)據(jù)是所有類產(chǎn)生的對(duì)象共享的數(shù)據(jù)。這里沒(méi)有用到類的數(shù)據(jù),要寫(xiě)的話是這樣: 代碼:class person:
38、160; school = 'bit' def _init_(self): = 'taowen' self.id = 20022479 def say_id(self): print "%s's id is %d" % (self.
39、name, self.id)me = person()me.say_id()print me.school對(duì)象的數(shù)據(jù)對(duì)象的數(shù)據(jù)是用self.變量名 = 。來(lái)生成的。這里就是對(duì)象的數(shù)據(jù)。對(duì)象的數(shù)據(jù)和類的數(shù)據(jù)不同,因?yàn)閷?duì)象之間的數(shù)據(jù)是互不共享的,而類的數(shù)據(jù)是被所有由類生成的對(duì)象共享的。對(duì)象的函數(shù)(類的函數(shù))兩個(gè)沒(méi)有區(qū)別,是類的就是對(duì)象的。其實(shí)就是類的(我說(shuō)的是底層實(shí)現(xiàn),不過(guò)不用管,如果關(guān)心怎么實(shí)現(xiàn)的,等我寫(xiě)Hacking OO吧,還沒(méi)影呢)。say_id就是對(duì)象的函數(shù),你能夠調(diào)用它。每個(gè)對(duì)象的函數(shù)都需要一個(gè)self參數(shù),表示color這個(gè)對(duì)象/color。為什么使用面向?qū)ο缶幊坛?/p>
40、去讓人覺(jué)得你比較專業(yè)外,當(dāng)然由切實(shí)的好處。比較淺顯的是你能夠表達(dá)一定的層次關(guān)系,類與類之間能夠有包含和繼承的關(guān)系(當(dāng)然你現(xiàn)在還不會(huì)。)。而且對(duì)象能夠把數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)放在一起,能夠比較清晰。雖然有所謂的數(shù)據(jù)隱藏的概念,但是在python中其實(shí)就是一個(gè)不要直接調(diào)用對(duì)象中的數(shù)據(jù)的約定,而要用一個(gè)函數(shù)作為中轉(zhuǎn)。其實(shí)不懂面向?qū)ο蠛苷?,其?shí)有的時(shí)候就是要在用的中間感悟的。什么時(shí)候把用函數(shù)編程用牛了,用出個(gè)道道來(lái)了,說(shuō)不定你已經(jīng)感覺(jué)到了什么是面向?qū)ο缶幊獭A硗猓核^什么OO,都是一些認(rèn)為規(guī)定,不用語(yǔ)法支持,只要心中有這個(gè)想法(什么想法?自己悟?。?,就能夠?qū)懗鯫O的代碼,不管你用的是什么語(yǔ)言,什么語(yǔ)法
41、。Lesson 12 python to exeabout py2exe本文講述如何將一個(gè)python源代碼編譯成一個(gè)exe.我會(huì)的只是最初步最基本的.實(shí)際上那個(gè)py2exe似乎有著更強(qiáng)大的功能1:下載安裝py2exe.from 2:假設(shè)你寫(xiě)好了一個(gè)python程序.guess_number.py.存在了c:Python23下面3:再寫(xiě)一個(gè)setup.py.也存在c:Python23下面.內(nèi)容如下 代碼:# setup.pyfrom distutils.core import setupimport py2exesetup(name="guess_number&
42、quot;, scripts="guess_number.py",)其中name和scripts是需要你到時(shí)候具體修改的.4:找到windows的dos模式(命令提示符).或者自己做個(gè)快捷方式也可以.C:Python23>C:Python23>python setup.py py2exe構(gòu)造就開(kāi)始了.幾秒鐘以后.在你的C:Python23就會(huì)出現(xiàn)兩個(gè)文件夾build和dist,前面那個(gè)里面似乎是源程序(這個(gè)我不太清楚).dist里面的就是編譯好的.exe了.ok.btw.等國(guó)兩天有了實(shí)際應(yīng)用再來(lái)翻譯這些東西Spe
43、cifying additional filesSome applications need additional files at runtime, this maybe configuration files, fonts, bitmaps, whatever.py2exe can copy these files into subdirectories of distmyscript if they are specified in the setup script with the data_files option. data_files should contain a seque
44、nce of (target-dir, files) tuples, where files is a sequence of files to be copied.Here's an example: 代碼:# setup.pyfrom distutils.core import setupimport globimport py2exesetup(name="myscript", scripts="myscript.py",
45、0;data_files=("bitmaps", "bm/large.gif", "bm/small.gif"), ("fonts",
46、; glob.glob("fonts*.fnt"),)This would create a subdirectory bitmaps in distmyscript, containing the two bitmaps, and a subdirectory fonts, containing all the *.fnt files. Lesson 13 寫(xiě)一個(gè)簡(jiǎn)單的界面很容易圖形界面是非常有吸引力的東西。但是制作出來(lái)似乎不是那么容易,這個(gè)觀點(diǎn)對(duì)于用C來(lái)笨拙寫(xiě)windows的窗口程序來(lái)說(shuō),是比
47、較正確的。微軟公司出品的windows是一個(gè)圖形界面的操作系統(tǒng),這個(gè)和dos或者linux這些不一樣,他們一開(kāi)始出來(lái)是針對(duì)字符界面的,然后再在上面加上一些庫(kù)來(lái)提供圖形的功能。windows則不同,它是包含在自己的最原始的功能之中,而這些圖形功能的提供是在user32.dll這樣的system目錄下的dll文件中以函數(shù)導(dǎo)出的形式提供的,但是要使用這些東西必須使用c語(yǔ)言的函數(shù)接口,而且編寫(xiě)麻煩。有一個(gè)很大的wndproc中要填入所有的事件處理代碼,非常丑陋。而作為腳本語(yǔ)言,所應(yīng)該有的簡(jiǎn)潔性,python對(duì)這個(gè)進(jìn)行了封裝。但是事情不是如你所想象。中間過(guò)程非常復(fù)雜,而且python用的也不是自己的庫(kù),
48、還是tcl的一個(gè)tk的庫(kù)再封裝了一次。雖然經(jīng)過(guò)層層封裝,裹得非常嚴(yán)實(shí),但是除了影響其在比較高性能的圖形場(chǎng)合下的應(yīng)用之外,并沒(méi)有帶來(lái)太大的麻煩。你能夠用很少的代碼,來(lái)完成其他語(yǔ)言+庫(kù)要很大行代碼才能表達(dá)的圖形樣式,雖然非常簡(jiǎn)陋,不過(guò)足夠使用。而且python除了自己原包裝帶的這個(gè)tkinter庫(kù)之外,還有其他的第三方的選擇,比較豐富,而且也有能夠勝任各種應(yīng)用的選擇。甚至,還有opengl和directx的庫(kù)的封裝庫(kù),能夠用來(lái)編寫(xiě)2d和3d的游戲,這個(gè)非常的誘人哦。但是我不會(huì),圖形界面的奧秘其實(shí)并不深?yuàn)W。我相信很多人學(xué)習(xí)windows編程都是從寫(xiě)一個(gè)窗口開(kāi)始的,而且都是從嘗試?yán)斫饽莻€(gè)消息和事件驅(qū)動(dòng)
49、的模型入手的。大體的過(guò)程是這樣的,窗口就是用象素畫(huà)出來(lái)的。你可以把一個(gè)窗口想象成一個(gè)窗口,也可以把窗口看成一堆象素的集合。就像有人說(shuō)看女色不過(guò)是皮肉色相一樣。而且窗口中的按鈕,編輯礦,各種圖標(biāo),無(wú)論是什么看起來(lái)像一個(gè)”物體“的東西,其實(shí)本質(zhì)上都是有應(yīng)用程序或者是庫(kù)或者是操作系統(tǒng)調(diào)用顯卡的驅(qū)動(dòng),通過(guò)顯卡的功能在屏幕上繪畫(huà)一些點(diǎn)出來(lái)。而所謂的”物體“有很多稱法,在windows中一般成為控件(control)。而對(duì)于圖形界面的操控一般是通過(guò)鼠標(biāo)和鍵盤來(lái)完成的。鼠標(biāo)在屏幕上有一個(gè)自己的形象,那就是一個(gè)箭頭(當(dāng)然你也可以調(diào)整這個(gè)圖形為其他好玩的東西,it is your freedom)。而鍵盤呢則一
50、般表示為一個(gè)虛線的框,表示這個(gè)是鍵盤的”焦點(diǎn)“所在的地方?;蛘呤蔷庉嬁蛑虚W動(dòng)的豎杠。這兩點(diǎn)中有一個(gè)共同點(diǎn),就是都有一個(gè)位置來(lái)確定要操作的對(duì)象。你點(diǎn)下鼠標(biāo)的時(shí)候,你操作的就是鼠標(biāo)的箭頭尖端指向的那個(gè)空間,而鍵盤按下也是在其焦點(diǎn)所在的控件那兒放聲。發(fā)生的是什么呢?發(fā)生的過(guò)程從硬件層面到軟件層面之后,最終是被操作系統(tǒng)接收。操作系統(tǒng)能夠知道你是點(diǎn)擊的是鼠標(biāo)還是鍵盤,在什么一個(gè)地方點(diǎn)下的,而且按下的是左鍵還是右鍵。操作系統(tǒng)還知道當(dāng)前窗口各處擺放的位置。綜合各路的信息,操作系統(tǒng)就能夠知道把這個(gè)”事件“作為”消息“發(fā)送給哪個(gè)窗口來(lái)處理。從中應(yīng)該能夠明白什么叫事件,而消息呢則是一個(gè)C中的結(jié)構(gòu)體,其中有幾個(gè)fi
51、eld中間放了有關(guān)這個(gè)事件的信息,然后就像一封信一樣從操作系統(tǒng)投遞到了窗口所在的應(yīng)用程序。然后應(yīng)用程序有一個(gè)事先注冊(cè)的”窗口過(guò)程“,其實(shí)就是一個(gè)函數(shù),用來(lái)接收這封“信”。其實(shí)就是接收到傳過(guò)來(lái)的參數(shù)。然后再進(jìn)行一些判斷,作出一定的響應(yīng)。這個(gè)就是所謂的事件驅(qū)動(dòng)。在沒(méi)有冗長(zhǎng)的代碼,和展示所有細(xì)節(jié)的情況下,如果你真的以前對(duì)這個(gè)過(guò)程一無(wú)所知,肯定會(huì)覺(jué)得非常茫然。這個(gè)一筆帶過(guò)的敘述其實(shí)只是讓你有一個(gè)感性的認(rèn)識(shí)。其實(shí)在python中使用窗口根本不用管諸葛么多?;旧现皇前炎约阂拇翱诤涂丶o一些位置的參數(shù),一些文字的提示內(nèi)容的參數(shù)就能把窗口擺好,顯示出來(lái)。然后再通過(guò)代碼告訴python,當(dāng)“這個(gè)按鈕按下的
52、時(shí)候執(zhí)行這個(gè)函數(shù)”,然后就能讓窗口有響應(yīng)。最后記得給一個(gè)退出窗口的辦法就一切OK了。其中能省的復(fù)雜度基本上都被庫(kù)給隱藏掉了。付出的代價(jià)是慢一些,但是我就不相信你能感覺(jué)出來(lái),除非你用的電腦連vcd都看不流暢。所以大可放心的享受這種便利。OK,下面來(lái)正式的看看怎么在python中創(chuàng)建一個(gè)窗口,然后顯示出來(lái)。 代碼:from Tkinter import *root = Tk()root.mainloop()就3行就能夠把主窗口顯示出來(lái)了。root是一個(gè)變量名稱,其代表了這個(gè)主窗口。以后創(chuàng)建控件的時(shí)候指定控件創(chuàng)建在什么窗口之中,就要用這個(gè)root來(lái)表示了。而Tk()是一個(gè)Tki
53、nter庫(kù)之中的函數(shù)(其實(shí)是類的構(gòu)造函數(shù),構(gòu)造了一個(gè)對(duì)象)。而mainloop則是主窗口的成員函數(shù),也就是表示讓這個(gè)root工作起來(lái),開(kāi)始接收鼠標(biāo)的和鍵盤的操作。你現(xiàn)在就能夠通過(guò)鼠標(biāo)縮放以及關(guān)閉這個(gè)窗口了。注意到窗口的標(biāo)題是tk,我們可以進(jìn)行一些修改root= Tk(className='bitunion')然后窗口的標(biāo)題就變成了bitunion了。下面要作的是把這個(gè)窗口的內(nèi)容填充一下,讓其有一些東西。先加入一個(gè)標(biāo)簽,所謂標(biāo)簽就是一行字。 代碼:from Tkinter import *root = Tk(className='bitunion
54、39;)label = Label(root)label'text' = 'be on your own'label.pack()root.mainloop()我們很驚訝的發(fā)現(xiàn)窗口變小了,但是其中多了一行字。變小了是因?yàn)榇翱谥幸呀?jīng)放了東西了,python的Tkinter非常智能,能夠根據(jù)內(nèi)容自動(dòng)縮放,而不用和傳統(tǒng)的windows程序一樣,手工的指定絕對(duì)坐標(biāo)了。對(duì)于label,它還是一個(gè)變量而已。不過(guò)這個(gè)變量代表了一個(gè)標(biāo)簽,也就是那一行字。而這個(gè)label的創(chuàng)建是用Label,而Label的參數(shù)是root表明了這個(gè)控件是root主窗口的成員控件,或者說(shuō)是子窗口。l
55、abel'text'表示設(shè)置這個(gè)標(biāo)簽的text屬性為'be on your own',也就是文字內(nèi)容了。label.pack和root.mainloop一樣費(fèi)解,但是內(nèi)涵一樣深刻。你現(xiàn)在可以簡(jiǎn)單理解為把label顯示出來(lái)的功能,因?yàn)槟惆裵ack去掉,那你就看不到東西了。其實(shí)pack是和控件的布局排版有關(guān)西的。再添加一個(gè)按鈕就能夠有更加豐富的內(nèi)容了,方法是很類似的??粗桑?#160; 代碼:from Tkinter import *root = Tk(className='bitunion')label = Label(root)label'text' = 'be on your own'label.pack()button = Button(root)button'text
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 香椿種植轉(zhuǎn)讓合同范本
- 南昌購(gòu)房合同范本
- 余泥外運(yùn)合同范本
- 衛(wèi)星定位合同范本
- 合同范本從里
- 不良資產(chǎn)合同范本
- 小型裝修合同范本
- 北京地暖合同范本
- 包工頭和工人簽合同范本
- 合同范本快速打字
- 慢性乙型肝炎防治指南(2022年版)解讀
- 搟筋課件教學(xué)課件
- 醫(yī)院工程改造工程施工組織設(shè)計(jì)方案
- 英語(yǔ)人稱代詞和物主代詞練習(xí)題(附答案)
- 計(jì)算機(jī)一級(jí)考試WPS試題及答案
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗(yàn)人員理論考試題庫(kù)及答案
- 《Windows server操作系統(tǒng)》Windows Server 2019全套教學(xué)課件
- 五、完成課題的可行性分析
- 全科醫(yī)生題庫(kù)附有答案
- 2024年12月大學(xué)英語(yǔ)四級(jí)CET-4真題試卷
- 煤礦應(yīng)急叫應(yīng)、回應(yīng)、響應(yīng)機(jī)制
評(píng)論
0/150
提交評(píng)論