第一部分練習(xí)題

是時(shí)候自己開始編程了。這一部分的練習(xí)相當(dāng)簡單,但是這樣是為了確保你為學(xué)習(xí)鉆研本書的剩余部分做好準(zhǔn)備娜汁,而這里的一些問題提示了未來章節(jié)的一些主題。一定要查看附錄D的第一部分以獲取答案(我抄就是了)甥啄;練習(xí)題以及解答有時(shí)候包含了·一些并沒有在這部分主要內(nèi)容中的補(bǔ)充信息存炮,所以即使你能夠獨(dú)立回答所有問題,也應(yīng)該看看解答。

1.交互使用系統(tǒng)命令行穆桂,IDLE或者任何你的平臺(tái)上工作的其他方法宫盔,開始Python交互命令行(>>>提示符),并輸入表達(dá)式"Hello World!"(包括引號(hào))(注意符號(hào)都是英文的)享完。這行字符串將會(huì)顯示出來灼芭。這個(gè)練習(xí)的目的是確保已配置Python運(yùn)行的環(huán)境。在某些情況下般又,你也許需要首先運(yùn)行一條shell命令彼绷,輸入Python可執(zhí)行文件的絕對(duì)路徑,或者增加Python可執(zhí)行文件的路徑至PATH環(huán)境變量茴迁。如果想要的話寄悯,你可以在.cshrs或.kshrc文件中設(shè)置PATH,使Python在UNIX系統(tǒng)中永久可用:在Windows上堕义,環(huán)境變量GUI通常就是你想要的猜旬。參照附錄A獲得環(huán)境變量設(shè)置的幫(有空我拍張照片的吧)。

假設(shè)Python以被正確配置倦卖,交互模式看起來應(yīng)該想下面這樣(可用在IDLE洒擦、shell命令行或其他方式下運(yùn)行):

2.程序。使用你選擇的文本編輯器怕膛,寫一個(gè)簡單的包含了單個(gè)打印‘Hello module world!’語句的模塊文件熟嫩,并將其保存為module1.py。現(xiàn)在褐捻,通過使用任何你喜歡的去的選項(xiàng)來運(yùn)行這個(gè)文件:在IDLE中運(yùn)行掸茅,點(diǎn)擊文件圖標(biāo),在系統(tǒng)shell的命令行中將其傳遞給Python解釋器程序(例如python module.py)等舍扰,實(shí)際上倦蚪,盡可能地使用本章所討論到的啟動(dòng)技術(shù)運(yùn)行你的文件去實(shí)驗(yàn)。哪種技術(shù)看起來更簡單边苹?(當(dāng)然,這個(gè)問題沒有正確的答案)

你的程序代碼(模塊)文件module1.py和操作系統(tǒng)的shell的交互應(yīng)該看起來像下面這樣:

同樣裁僧,你也可以用其他方式運(yùn)行:單機(jī)文件圖標(biāo)个束,使用IDLE的RUN RUN Module 菜單選項(xiàng)等。

3.模塊聊疲。緊接著茬底,開始一個(gè)Python交互命令行(>>>提示符),并導(dǎo)入你在練習(xí)2中所寫的模塊获洲,試著將這個(gè)文件移動(dòng)到一個(gè)不同的目錄阱表,并在此從其原始的目錄導(dǎo)入(也就是說,當(dāng)導(dǎo)入時(shí)在原來那個(gè)目錄運(yùn)行Python)。發(fā)生了什么最爬?(提示:在原來的目錄中是否仍然有一個(gè)module1.pyc的字節(jié)碼文件涉馁,或者在__pycache__子目錄下有類似的文件?)

下面的交互結(jié)果說明了應(yīng)該如何導(dǎo)入模塊文件從而運(yùn)行一個(gè)模塊:

要記住爱致,如果你不想停止和重啟解釋器的情況下再次運(yùn)行一個(gè)模塊烤送,則需要重新加載它。把文件移動(dòng)到不同的目錄并導(dǎo)入它是一個(gè)很有技巧性的問題:如果Python在最初的目錄產(chǎn)生了module1.pyc文件糠悯,即代表源代碼文件(.py)已被移植到不在Python搜索路徑中的目錄帮坚,在最初的目錄中再次導(dǎo)入該模塊時(shí),Python依然會(huì)使用這個(gè)pyc文件互艾。如果把當(dāng)前目錄切換到Python可讀取源代碼文件的目錄试和,那么Python就會(huì)自動(dòng)寫.pyc文件。.pyc是模塊編譯后的字節(jié)碼版本纫普。參考第三章有關(guān)模塊的內(nèi)容灰署。

4.腳本。如果你的平臺(tái)支持的話局嘁,在module1.py模塊文件的頂行增加一行#溉箕!,賦予這個(gè)文件的可執(zhí)行的權(quán)限悦昵,并作為可執(zhí)行文件直接運(yùn)行它肴茄。在第一行需要包含什么?#但指!一般是UNIX寡痰、Linux和UNIX類平臺(tái)(如Mac OS X)有意義,如果你在Windows平臺(tái)上工作棋凳,遇過‘開始 到 運(yùn)行’對(duì)話框或類似的操作拦坠,然后試著在命令行窗口不在其前邊加‘python’這個(gè)詞而直接列出其名字來運(yùn)行這個(gè)文件(這在最新版本的Windows上有效)。如果你正在使用隨著操作系統(tǒng)安裝的Python3.3或Windows啟動(dòng)器剩岳,改變腳本的#贞滨!代碼進(jìn)行試驗(yàn),來啟動(dòng)你可能在電腦上已安裝的不同的Python版本拍棕。

假設(shè)你的平臺(tái)支持#晓铆!技巧,你的解法看起來應(yīng)該像下面這樣(#绰播!后面應(yīng)該寫東西的)骄噪,雖然你的#!行可能需要列出機(jī)器上的另一路徑蠢箩。注意這些行對(duì)隨著Python3.3配備和安裝的Windows啟動(dòng)器是十分重要的链蕊,在啟動(dòng)器下它們被解析以選擇Python的另一個(gè)版本來運(yùn)行腳本事甜,并帶有默認(rèn)設(shè)置:參看附錄B獲取更多細(xì)節(jié)和示例。

5.錯(cuò)誤和調(diào)試滔韵。在Python交互命令行中逻谦,試著輸入數(shù)學(xué)表達(dá)式和賦值。首先輸入2**500和1/0奏属,并且像我們?cè)诒菊虑懊嫠龅哪菢右靡粋€(gè)未知的變量名跨跨。發(fā)生了什么?

你也許還不知道囱皿,但是當(dāng)你翻了一個(gè)錯(cuò)誤勇婴,你正在做的是異常處理:這將會(huì)在第七部分深入探索。如同你將會(huì)在那里學(xué)到的嘱腥,從技術(shù)上正在觸發(fā)所謂的默認(rèn)打印本章錯(cuò)誤信息的異常處理邏輯耕渴。如果你沒有獲得錯(cuò)誤信息,那么默認(rèn)的處理模塊獲得并作為回應(yīng)打印了標(biāo)準(zhǔn)的錯(cuò)誤信息齿兔。

異吵髁常總是和Python中的調(diào)試概念密切相關(guān)的。當(dāng)你第一次開始的時(shí)候分苇,Python關(guān)于異常的默認(rèn)錯(cuò)誤信息總是為你的錯(cuò)誤處理提供盡可能多的支持添诉,他們給出錯(cuò)誤的原因,并且在代碼中顯示錯(cuò)誤發(fā)生時(shí)所執(zhí)行的行医寿。要了解關(guān)于調(diào)試的更多內(nèi)容栏赴,詳見第三章的調(diào)試Python代碼部分。

下面的交互模式示范了當(dāng)你完成此練習(xí)題時(shí)會(huì)碰到的出錯(cuò)消息種類靖秩。其實(shí)须眷,你只是觸發(fā)了Python的異常;默認(rèn)的異常處理行為會(huì)終止正在運(yùn)行的Python程序沟突,然后在屏幕上打印出錯(cuò)消息和調(diào)用棧的跟蹤信息花颗。調(diào)用棧的跟蹤信息顯示出當(dāng)異常發(fā)生時(shí),程序所運(yùn)行到的位置惠拭。在第十章和第七部分中扩劝,你還可以使用try語句捕獲它,并進(jìn)行任意的處理求橄。你也會(huì)看到Python包含了一套成熟的源代碼調(diào)試器今野,從而可以滿足特殊的錯(cuò)誤檢測的需求。就目前而言罐农,程序錯(cuò)誤發(fā)生時(shí),Python會(huì)提供有意義的消息而不是默默地就崩潰了:

6.中斷催什。在Python命令行中涵亏,輸入:

L = [1,2]

L.append(L)

L

發(fā)生了什么,如果使用的是比1.5版本(我沒寫錯(cuò))更新的Python,你也許能夠看到一個(gè)奇怪的說辭气筋,我們將會(huì)在本書的下一部分降到拆内。如果你用的Python版本比1.5.1還老,在絕大多數(shù)平臺(tái)上Ctrl+ C組合鍵也許會(huì)有用宠默。為什么會(huì)發(fā)什么這種情況麸恍。

當(dāng)你輸入一下代碼的時(shí)候:

L = [1,2]

L.append(L)

會(huì)在Python中創(chuàng)建循環(huán)數(shù)據(jù)結(jié)構(gòu)。在1.5.1版以前搀矫,Python的打印不夠智能抹沪,因此無法檢測中對(duì)象中的循環(huán),并會(huì)打印無止境的[1,2,[1,2,[1,2,[1,2,流瓤球,直到

你按下了機(jī)器上的中斷組合鍵(從技術(shù)上來講融欧,這將引發(fā)鍵盤中斷異常,并打印默認(rèn)消息)卦羡。從Python1.5.1起噪馏,打印已經(jīng)足夠智能,可以檢測出循環(huán)并打印[[...]]绿饵,進(jìn)而讓你知道它已經(jīng)在對(duì)象結(jié)構(gòu)中檢測到一個(gè)循環(huán)并避免永遠(yuǎn)打印欠肾。

這里出現(xiàn)的循環(huán)的原因很細(xì)節(jié),并且需要用到本書第二部分中的內(nèi)容拟赊,不過簡而言之刺桃,Python中的賦值語句總是會(huì)產(chǎn)生對(duì)象的應(yīng)用,而不是它們的副本要门。你可以把對(duì)象看做一快內(nèi)存虏肾,把應(yīng)用看做是隱式指向的指針。當(dāng)你執(zhí)行上面的第一條賦值語句時(shí)欢搜,名稱L變成了一個(gè)指向雙元素列表對(duì)象的引用名稱封豪,也就是指向一段內(nèi)存的指針。Python的列表其實(shí)是對(duì)象引用的數(shù)組炒瘟,它有一個(gè)append方法會(huì)通過在末尾添加另一個(gè)對(duì)象的引用吹埠,對(duì)數(shù)組進(jìn)行原位置的修改。在這里疮装,append調(diào)用會(huì)把L前面的引用加在L的末尾缘琅,從而造成下圖所示的循環(huán):列表末尾的一個(gè)指針指回到列表的頭部。


循環(huán)對(duì)象廓推,通過把列表附加到自身末尾而得到刷袍。在默認(rèn)情況下,Python會(huì)附加原有的列表引用值樊展,而不是列表的副本呻纹。

正如第六章所學(xué)堆生,循環(huán)對(duì)象不但會(huì)被特殊地打印,還必須被Python的垃圾回收器特殊處理雷酪,否則當(dāng)它們不再使用時(shí)淑仆,將會(huì)出現(xiàn)空間仍舊未回收的情況。盡管這在實(shí)際中很少見哥力,但在一些遍歷任意對(duì)象或結(jié)構(gòu)的程序中蔗怠,你必須通過記錄已經(jīng)遍歷到哪里,來檢測并避免陷入這樣的循環(huán)吩跋。不過盡管難以置信寞射,但是循環(huán)數(shù)據(jù)結(jié)構(gòu)偶爾也是很有用的(輸入它的打印非常獨(dú)特)。

7.文檔钞澳。在你繼續(xù)感受標(biāo)準(zhǔn)庫中可用的工具和文檔集的結(jié)構(gòu)之前怠惶,至少話15分鐘瀏覽一下Python庫和語言手冊(cè),為了熟悉手冊(cè)集的主題轧粟,至少得花這么長的時(shí)間策治。一旦你這樣做了,將很容易找到你需要的東西兰吟。你可以在一些Windows版本上的Python開始按鈕菜單選項(xiàng)通惫,或者在IDLE的Help下拉菜單的Python Docs選項(xiàng)里,或者在網(wǎng)址http://www.python.org/doc上找到這個(gè)手冊(cè)混蔼。本書將會(huì)在第15章用部分內(nèi)容描述一些手冊(cè)以及其他可用文檔資源中的內(nèi)容(包括PyDoc以及help函數(shù))履腋。如果還有時(shí)間,千萬Python的網(wǎng)址以及PyPI第三方擴(kuò)展的網(wǎng)站看看惭嚣。特別留意Python.org(http://www.python.org)的文檔和搜索界面遵湖,它們是至關(guān)重要的資源。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晚吞,一起剝皮案震驚了整個(gè)濱河市延旧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌槽地,老刑警劉巖迁沫,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捌蚊,居然都是意外死亡集畅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門缅糟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挺智,“玉大人,你說我怎么就攤上這事窗宦√颖矗” “怎么了谣辞?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵迫摔,是天一觀的道長沐扳。 經(jīng)常有香客問我,道長句占,這世上最難降的妖魔是什么沪摄? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮纱烘,結(jié)果婚禮上杨拐,老公的妹妹穿的比我還像新娘。我一直安慰自己擂啥,他們只是感情好哄陶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哺壶,像睡著了一般屋吨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上山宾,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天至扰,我揣著相機(jī)與錄音,去河邊找鬼资锰。 笑死敢课,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绷杜。 我是一名探鬼主播直秆,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鞭盟!你這毒婦竟也來了圾结?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤懊缺,失蹤者是張志新(化名)和其女友劉穎疫稿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹃两,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遗座,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俊扳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片途蒋。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖馋记,靈堂內(nèi)的尸體忽然破棺而出号坡,到底是詐尸還是另有隱情懊烤,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布宽堆,位于F島的核電站腌紧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏畜隶。R本人自食惡果不足惜壁肋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望籽慢。 院中可真熱鬧浸遗,春花似錦、人聲如沸箱亿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽届惋。三九已至髓帽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盼樟,已是汗流浹背氢卡。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晨缴,地道東北人译秦。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像击碗,于是被迫代替她去往敵國和親筑悴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容