




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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版本的我就不說了,因?yàn)槿绻隳軌蚴褂胠inux并安裝好說明你可以一切自己搞定的。運(yùn)行環(huán)境可以是linux或者是windows:1、linuxredhat的linux安裝上去之后一定會(huì)有python的(必須的組件),在命令行中輸入python回車。這樣就可以進(jìn)入一個(gè)>>>的提示符2、windows安裝好了python之后,在開始菜單里面找到Python2.3->IDLE,運(yùn)行也會(huì)進(jìn)入一個(gè)有>>>提示符的窗口開始嘗試Python1、輸入:welcome = "Hello!&q
2、uot;回車然后又回到了>>>2、輸入:print welcome回車然后就可以看到你自己輸入的問候了。Lesson 2 搞定環(huán)境之后的前行Python有一個(gè)交互式的命令行,大家已經(jīng)看到了吧。所以可以比較方便的學(xué)習(xí)和嘗試,不用“新建存檔編譯調(diào)試”,非常適合快速的嘗試。一開始從變量開始(其實(shí)說變量,更準(zhǔn)確的是對(duì)象,Python中什么都可以理解為對(duì)象)。變量welcome = "hello!"welcome就是變量名,字符串就是變量的類型,hello!就是變量的內(nèi)容,""表示這個(gè)變量是字符串,""中間的是字符串的內(nèi)容。熟
3、悉其他語言的人,特別是編譯類型的語言,覺得沒有變量的聲明很奇怪。在python中用賦值來表示我要這么一個(gè)變量,即使你不知道要放什么內(nèi)容,只是要先弄一個(gè)地方來放你的東西,也要這么寫:store = ""不過這個(gè)還是說明了store是字符串,因?yàn)?quot;"的緣故。have a try 代碼: tmp_storage = ""welcome = "hello!"tmp_storage = welcomeprint tmp_storage你會(huì)發(fā)現(xiàn)同樣的問候出現(xiàn)了。字符串字符串是用"&qu
4、ot;標(biāo)記的,但是用''也可以(不要說你看不出一個(gè)是雙引號(hào),一個(gè)是單引號(hào)),兩者之間是有一丁點(diǎn)區(qū)別,不過你可以不用理會(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é)得最多的是集合,無論什么數(shù)學(xué)書都從集合開始講起。然后講函數(shù)呢,又必然把映射再講一遍??梢哉f,集合和映射是數(shù)學(xué)中最基本的結(jié)構(gòu)了。Python對(duì)于數(shù)據(jù)結(jié)構(gòu)非常明智的內(nèi)置了兩個(gè),回想我寫C的程序,往往是一開始就是用struct拼一個(gè)鏈表出來(重復(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ì)象,什么是成員方法,然后扯出一大段出來。list是可以索引的:print my_list1不過你或許會(huì)不明白為什么是2,而不是顯示的是1。因?yàn)樗饕龔?開始,要輸出第一個(gè)元
7、素:print my_list0字典 代碼: contact = 這個(gè)產(chǎn)生了一個(gè)空字典,contact。然后往里面填充內(nèi)容: 代碼: contact=contact"name"="taowen"contact"phone"=68942443name就是你查字典的時(shí)候要查找的單詞,taowen就是查到的內(nèi)容。不過你現(xiàn)在不是查,而是在寫這個(gè)字典。同理添加了phone這個(gè)詞條。現(xiàn)在添加好了,看看contact的內(nèi)容,怎么查看?自己想辦法吧。如果你悟性夠,就會(huì)發(fā)現(xiàn)python很多
8、操作是通用的,既然能夠print 1, print "", print my_list,那么其他數(shù)據(jù)類型的變量就沒有理由不能用了。結(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 用不同的方式來操作Python到現(xiàn)在為止,我們用的都是交互式的命令行來操作的,的卻是很方便,是吧?不過,復(fù)雜一些的情況就不那么好使了,來換一種方式來操作Python在IDLE中點(diǎn)擊File->New Window,出現(xiàn)一個(gè)新窗口(對(duì)于linux下,你要用vim或者emacs或者pico把文本的源文件寫好了)。為了方便,先點(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)。而且也沒有在python中發(fā)現(xiàn)和C/C+中類似的標(biāo)記也沒有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,可能提示你沒有存盤,照著辦就是了。發(fā)揮你的能力,計(jì)算從1到10的所
11、有偶數(shù)的和(提示,可能沒有你想象的那么智能)。Lesson 5 Python中的輸入與判斷健全的程序大凡都需要輸入的功能,所以要學(xué)習(xí)一下簡(jiǎn)單的輸入:輸入要使用的是raw_input或者input函數(shù),區(qū)別是raw_input直接把你的輸入作為字符串返回,而input則在raw_input的基礎(chǔ)上把字符串轉(zhuǎn)換為數(shù)字返回(如果你輸入$#$怎么辦?自己試試看)。我們就利用這兩個(gè)輸入函數(shù)來作一些有趣的事情。 代碼: 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了,過了嘛,什么都不干了。break就是跳出這個(gè)while 1(無窮循環(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),不過也不是解釋不清楚。我干脆也不解釋了吧。給大家增進(jìn)一點(diǎn)興趣。還是解釋一下fromt Tkinter import *是引入一個(gè)模塊,這個(gè)模塊用來創(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()開始了一個(gè)循環(huán),是等待你的輸入的循環(huán)。Lesson 7 Python基本語法要素齊動(dòng)員現(xiàn)在的目的是盡量想出一個(gè)用的東西僅限于內(nèi)置的變量類型和語句的一個(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è)的遍歷,不過這里展示了另外一種非
19、常方便的方法。而且值得注意的是append()中的參數(shù),我使用了contact.copy(),你可以嘗試著把copy()給去掉,觀察結(jié)果你就知道了所謂的append是怎么干的了,特別是你對(duì)指針之類的東西很有感覺的話(但是在Python中是沒有指針這個(gè)概念的)再來看看字典字典是鍵(key)和值(value)的對(duì)應(yīng)組合成的無序的序列。所以你存的時(shí)候要指明鍵(name或者phone),而且取的時(shí)候也是一樣的。接下來是判斷if是很好用的,=表示判斷兩個(gè)是否相等,=表示把右邊的賦給左邊的。而且可以直接判斷字符串是否相等,這個(gè)太方便了,如果你曾經(jīng)用過strcpy()的話,就知道了。elif是表示else
20、if的意思,如果if不滿足就判斷elif的條件是否滿足,最后是到else中去。循環(huán)是個(gè)主體while和for都是循環(huán)。不過這里while就沒什么說的了,又是很經(jīng)典的while 1,死循環(huán),然后必須在里面用break來跳出。for和C中的for是不一樣的,for in才是一個(gè)完整的語句,指的是從一個(gè)能夠逐一取值的序列中(比如list),一個(gè)一個(gè)的取出值賦給for后面指定的變量中,直到取空,循環(huán)結(jié)束。其實(shí)回想一般用C中的for的經(jīng)歷,也大體如此。而且你還可以用for i in range(1,100)來指定一個(gè)范圍從多少到多少??梢哉ffor in充分體現(xiàn)了python的體貼周到,用起來很直觀,不會(huì)
21、繞彎。接下來就是運(yùn)行了,大家慢慢調(diào)試吧。下次可能是講異常處理,因?yàn)槲矣X得在深入到使用各種高級(jí)的要素之前,先要學(xué)會(huì)怎么去處理異常。最常見的異常應(yīng)該是input(),然后你給出的輸入是一個(gè)無法轉(zhuǎn)換為數(shù)字的字符串了,那么我們就要來處理它。Lesson 8 Python中的錯(cuò)誤檢測(cè)寫程序什么最重要?完成功能最重要。但是程序中難免要有用戶的輸入,對(duì)于這些寫的時(shí)候未可預(yù)知的因素中間可能出現(xiàn)的錯(cuò)誤,一般稱作異常。對(duì)于異常情況的處理,不同語言有不同的做法,比如檢查函數(shù)的返回值之類的,但是那種辦法會(huì)把代碼弄成一團(tuán)漿糊。Python在這個(gè)方面是比較先進(jìn)的,我們從一個(gè)例子來看看: 代碼:
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處理之后取出來?,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ò)誤。這么來作: 代碼: try: print input()except: print 'there is an error in your input'這下你無論怎么輸入都不會(huì)有什么其他的提示了,就是自己設(shè)定的print語句作為提示?,F(xiàn)在把try except的組合去掉,回到print input()你再嘗試一下:1/0這個(gè)顯然是一個(gè)錯(cuò)誤,被零除的錯(cuò)誤。那么專門來捕捉一下這個(gè)錯(cuò)誤:
25、60;代碼: try: print input()except ZeroDivisionError: print 'can not be divided by zero'這下你能夠捕捉到被零除的錯(cuò)誤了。然后你再嘗試其他的輸入,可能錯(cuò)誤就沒有被捕捉了。所以再補(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è)沒關(guān)系,慢慢來嘛)。以后還能夠自己raise(引發(fā))異常呢。不過那都是比較高級(jí)的應(yīng)用了,對(duì)于出錯(cuò)處理從一開始就有這個(gè)印象,并牢記在心中對(duì)于以后寫大一些的軟件很有好處。Lesson 9 走向模塊化的第一步大規(guī)模的程序設(shè)計(jì)需要你把一個(gè)大的程序拆分成n個(gè)模塊。然后把模塊進(jìn)行組合,交互成為一個(gè)完整的程序。你不可能像現(xiàn)在這樣,從頂寫到尾。那么
27、我們從函數(shù)開始。 代碼:def square(x): return x*2print square(5)簡(jiǎn)單吧,這個(gè)是我看過的函數(shù)定義中最簡(jiǎn)潔的。def表示這個(gè)開始定義一個(gè)函數(shù),x是參數(shù),參數(shù)是不需要類型的,因?yàn)閜ython是不需要明確指出類型的。return是返回值,返回的值插入到調(diào)用函數(shù)的地方。再復(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è)值。怎么說呢。(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)來的參數(shù)是否可以被修改,這個(gè)問題取決于你傳遞了什么近來。如果是數(shù)字或者字符串,是不能夠改變的,但是如果是這樣的: 代碼:def test_func(list_be_passed): list_be_passed0 = 'towin'my_list = 'taowen'print my_listtest_func(my_list)print my_list就能夠改變傳遞近來的參數(shù)了,所以處理的時(shí)候要小心,必要的時(shí)候copy一下再傳遞。函數(shù)簡(jiǎn)單吧,但是很好用的。想起C中的函數(shù)那么那么多麻煩,真是感慨萬
30、千啊。下面是應(yīng)該講GUI編程呢,還是面向?qū)ο竽兀克伎家幌翷esson 10 Python的文件操作文件操作.是一個(gè)語言和外界聯(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()來讀取文件內(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()>>> 然后是文件的寫入 代碼:>>> 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是支持的。不過用起來會(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ì)覺得暈。我來解釋一下。所謂面向?qū)ο笫前褦?shù)據(jù)和操作數(shù)據(jù)的函數(shù)放到同一個(gè)類中去,然后用類來創(chuàng)建對(duì)象,操作的時(shí)候能夠比較方便(很不精確的說法,任何一個(gè)OO高手都可以把我罵得屁都不是)。類類是clas
37、s關(guān)鍵來定義的。class person:就是說定義一個(gè)類,名字叫person。對(duì)象對(duì)象是用類來產(chǎn)生的。所以me就是對(duì)象,產(chǎn)生的辦法就是像調(diào)用函數(shù)一樣,person(),而且()中是能夠放參數(shù)的,什么時(shí)候要參數(shù),看下面的“初始化函數(shù)“初始化函數(shù)類可以有自己的初始化函數(shù),每次類被創(chuàng)建的時(shí)候(調(diào)用person()這樣的語句的時(shí)候),都會(huì)調(diào)用它。這個(gè)在C+中的名稱是構(gòu)造函數(shù)。_init_是必須的名字,你不能用其他名字來當(dāng)初始化函數(shù)。但是你可以沒有初始化函數(shù)。類的數(shù)據(jù)類的數(shù)據(jù)是所有類產(chǎn)生的對(duì)象共享的數(shù)據(jù)。這里沒有用到類的數(shù)據(jù),要寫的話是這樣: 代碼: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.變量名 = 。來生成的。這里就是對(duì)象的數(shù)據(jù)。對(duì)象的數(shù)據(jù)和類的數(shù)據(jù)不同,因?yàn)閷?duì)象之間的數(shù)據(jù)是互不共享的,而類的數(shù)據(jù)是被所有由類生成的對(duì)象共享的。對(duì)象的函數(shù)(類的函數(shù))兩個(gè)沒有區(qū)別,是類的就是對(duì)象的。其實(shí)就是類的(我說的是底層實(shí)現(xiàn),不過不用管,如果關(guān)心怎么實(shí)現(xiàn)的,等我寫Hacking OO吧,還沒影呢)。say_id就是對(duì)象的函數(shù),你能夠調(diào)用它。每個(gè)對(duì)象的函數(shù)都需要一個(gè)self參數(shù),表示color這個(gè)對(duì)象/color。為什么使用面向?qū)ο缶幊坛?/p>
40、去讓人覺得你比較專業(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è)道道來了,說不定你已經(jīng)感覺到了什么是面向?qū)ο缶幊?。另外:所謂什么OO,都是一些認(rèn)為規(guī)定,不用語法支持,只要心中有這個(gè)想法(什么想法?自己悟?。?,就能夠?qū)懗鯫O的代碼,不管你用的是什么語言,什么語法
41、。Lesson 12 python to exeabout py2exe本文講述如何將一個(gè)python源代碼編譯成一個(gè)exe.我會(huì)的只是最初步最基本的.實(shí)際上那個(gè)py2exe似乎有著更強(qiáng)大的功能1:下載安裝py2exe.from 2:假設(shè)你寫好了一個(gè)python程序.guess_number.py.存在了c:Python23下面3:再寫一個(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)造就開始了.幾秒鐘以后.在你的C:Python23就會(huì)出現(xiàn)兩個(gè)文件夾build和dist,前面那個(gè)里面似乎是源程序(這個(gè)我不太清楚).dist里面的就是編譯好的.exe了.ok.btw.等國兩天有了實(shí)際應(yīng)用再來翻譯這些東西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 寫一個(gè)簡(jiǎn)單的界面很容易圖形界面是非常有吸引力的東西。但是制作出來似乎不是那么容易,這個(gè)觀點(diǎn)對(duì)于用C來笨拙寫windows的窗口程序來說,是比
47、較正確的。微軟公司出品的windows是一個(gè)圖形界面的操作系統(tǒng),這個(gè)和dos或者linux這些不一樣,他們一開始出來是針對(duì)字符界面的,然后再在上面加上一些庫來提供圖形的功能。windows則不同,它是包含在自己的最原始的功能之中,而這些圖形功能的提供是在user32.dll這樣的system目錄下的dll文件中以函數(shù)導(dǎo)出的形式提供的,但是要使用這些東西必須使用c語言的函數(shù)接口,而且編寫麻煩。有一個(gè)很大的wndproc中要填入所有的事件處理代碼,非常丑陋。而作為腳本語言,所應(yīng)該有的簡(jiǎn)潔性,python對(duì)這個(gè)進(jìn)行了封裝。但是事情不是如你所想象。中間過程非常復(fù)雜,而且python用的也不是自己的庫,
48、還是tcl的一個(gè)tk的庫再封裝了一次。雖然經(jīng)過層層封裝,裹得非常嚴(yán)實(shí),但是除了影響其在比較高性能的圖形場(chǎng)合下的應(yīng)用之外,并沒有帶來太大的麻煩。你能夠用很少的代碼,來完成其他語言+庫要很大行代碼才能表達(dá)的圖形樣式,雖然非常簡(jiǎn)陋,不過足夠使用。而且python除了自己原包裝帶的這個(gè)tkinter庫之外,還有其他的第三方的選擇,比較豐富,而且也有能夠勝任各種應(yīng)用的選擇。甚至,還有opengl和directx的庫的封裝庫,能夠用來編寫2d和3d的游戲,這個(gè)非常的誘人哦。但是我不會(huì),圖形界面的奧秘其實(shí)并不深?yuàn)W。我相信很多人學(xué)習(xí)windows編程都是從寫一個(gè)窗口開始的,而且都是從嘗試?yán)斫饽莻€(gè)消息和事件驅(qū)動(dòng)
49、的模型入手的。大體的過程是這樣的,窗口就是用象素畫出來的。你可以把一個(gè)窗口想象成一個(gè)窗口,也可以把窗口看成一堆象素的集合。就像有人說看女色不過是皮肉色相一樣。而且窗口中的按鈕,編輯礦,各種圖標(biāo),無論是什么看起來像一個(gè)”物體“的東西,其實(shí)本質(zhì)上都是有應(yīng)用程序或者是庫或者是操作系統(tǒng)調(diào)用顯卡的驅(qū)動(dòng),通過顯卡的功能在屏幕上繪畫一些點(diǎn)出來。而所謂的”物體“有很多稱法,在windows中一般成為控件(control)。而對(duì)于圖形界面的操控一般是通過鼠標(biāo)和鍵盤來完成的。鼠標(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è)位置來確定要操作的對(duì)象。你點(diǎn)下鼠標(biāo)的時(shí)候,你操作的就是鼠標(biāo)的箭頭尖端指向的那個(gè)空間,而鍵盤按下也是在其焦點(diǎn)所在的控件那兒放聲。發(fā)生的是什么呢?發(fā)生的過程從硬件層面到軟件層面之后,最終是被操作系統(tǒng)接收。操作系統(tǒng)能夠知道你是點(diǎn)擊的是鼠標(biāo)還是鍵盤,在什么一個(gè)地方點(diǎn)下的,而且按下的是左鍵還是右鍵。操作系統(tǒng)還知道當(dāng)前窗口各處擺放的位置。綜合各路的信息,操作系統(tǒng)就能夠知道把這個(gè)”事件“作為”消息“發(fā)送給哪個(gè)窗口來處理。從中應(yīng)該能夠明白什么叫事件,而消息呢則是一個(gè)C中的結(jié)構(gòu)體,其中有幾個(gè)fi
51、eld中間放了有關(guān)這個(gè)事件的信息,然后就像一封信一樣從操作系統(tǒng)投遞到了窗口所在的應(yīng)用程序。然后應(yīng)用程序有一個(gè)事先注冊(cè)的”窗口過程“,其實(shí)就是一個(gè)函數(shù),用來接收這封“信”。其實(shí)就是接收到傳過來的參數(shù)。然后再進(jìn)行一些判斷,作出一定的響應(yīng)。這個(gè)就是所謂的事件驅(qū)動(dòng)。在沒有冗長(zhǎng)的代碼,和展示所有細(xì)節(jié)的情況下,如果你真的以前對(duì)這個(gè)過程一無所知,肯定會(huì)覺得非常茫然。這個(gè)一筆帶過的敘述其實(shí)只是讓你有一個(gè)感性的認(rèn)識(shí)。其實(shí)在python中使用窗口根本不用管諸葛么多?;旧现皇前炎约阂拇翱诤涂丶?,給一些位置的參數(shù),一些文字的提示內(nèi)容的參數(shù)就能把窗口擺好,顯示出來。然后再通過代碼告訴python,當(dāng)“這個(gè)按鈕按下的
52、時(shí)候執(zhí)行這個(gè)函數(shù)”,然后就能讓窗口有響應(yīng)。最后記得給一個(gè)退出窗口的辦法就一切OK了。其中能省的復(fù)雜度基本上都被庫給隱藏掉了。付出的代價(jià)是慢一些,但是我就不相信你能感覺出來,除非你用的電腦連vcd都看不流暢。所以大可放心的享受這種便利。OK,下面來正式的看看怎么在python中創(chuàng)建一個(gè)窗口,然后顯示出來。 代碼:from Tkinter import *root = Tk()root.mainloop()就3行就能夠把主窗口顯示出來了。root是一個(gè)變量名稱,其代表了這個(gè)主窗口。以后創(chuàng)建控件的時(shí)候指定控件創(chuàng)建在什么窗口之中,就要用這個(gè)root來表示了。而Tk()是一個(gè)Tki
53、nter庫之中的函數(shù)(其實(shí)是類的構(gòu)造函數(shù),構(gòu)造了一個(gè)對(duì)象)。而mainloop則是主窗口的成員函數(shù),也就是表示讓這個(gè)root工作起來,開始接收鼠標(biāo)的和鍵盤的操作。你現(xiàn)在就能夠通過鼠標(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è)變量而已。不過這個(gè)變量代表了一個(gè)標(biāo)簽,也就是那一行字。而這個(gè)label的創(chuàng)建是用Label,而Label的參數(shù)是root表明了這個(gè)控件是root主窗口的成員控件,或者說是子窗口。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顯示出來的功能,因?yàn)槟惆裵ack去掉,那你就看不到東西了。其實(shí)pack是和控件的布局排版有關(guān)西的。再添加一個(gè)按鈕就能夠有更加豐富的內(nèi)容了,方法是很類似的。看著吧: 代碼:from Tkinter import *root = Tk(className='bitunion')label = Label(root)label'text' = 'be on your own'label.pack()button = Button(root)button'text
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 繼電保護(hù)檢修模擬習(xí)題含參考答案
- 變配電運(yùn)維題庫含答案
- 醫(yī)學(xué)綜合測(cè)試題含參考答案
- 05水平五 高一 直腿后滾翻單元5課時(shí)計(jì)劃-《直腿后滾翻》教學(xué)設(shè)計(jì)-課后反思
- 2024國家電投集團(tuán)中國電力招聘22人筆試參考題庫附帶答案詳解
- 2024國家中鋁招標(biāo)有限公司面向集團(tuán)內(nèi)部競(jìng)爭(zhēng)上崗6人筆試參考題庫附帶答案詳解
- 幼兒保教知識(shí)與能力-教師資格《幼兒保教知識(shí)與能力》模擬題5
- 《三顧茅廬》教學(xué)設(shè)計(jì)-2024-2025學(xué)年九年級(jí)語文上冊(cè)同步特色備課資源(統(tǒng)編版)
- 14 《我要的是葫蘆》教學(xué)設(shè)計(jì)-2024-2025學(xué)年二年級(jí)上冊(cè)語文統(tǒng)編版
- 第16課 冷戰(zhàn)(教學(xué)設(shè)計(jì))-2024-2025學(xué)年九年級(jí)歷史下冊(cè)素養(yǎng)提升教學(xué)設(shè)計(jì)(統(tǒng)編版)
- 12月腹痛護(hù)理常規(guī)
- 經(jīng)典文學(xué)作品中的女性形象研究外文文獻(xiàn)翻譯2016年
- 控股集團(tuán)公司組織架構(gòu)圖.docx
- 高爐煤氣安全知識(shí)的培訓(xùn)
- 2008 年全國高校俄語專業(yè)四級(jí)水平測(cè)試試卷
- 需求供給與均衡價(jià)格PPT課件
- 最常用2000個(gè)英語單詞_(全部標(biāo)有注釋)字母排序
- 在銀行大零售業(yè)務(wù)工作會(huì)議上的講話講解學(xué)習(xí)
- 古代傳說中的藝術(shù)形象-
- 水電站大壩土建安裝工程懸臂模板施工手冊(cè)
- 三體系內(nèi)審檢查表(共58頁).doc
評(píng)論
0/150
提交評(píng)論