英文版書名:Beginning Python From Novice to Professional(Second Edition)
作者:【挪】Magnus Lie Hetland
譯者:司維不撑、曾軍崴、譚穎華
人民郵電出版社
一、譯者序(2010年2月)
和大多數(shù)Python愛好者兔辅、使用者和開發(fā)者一樣维苔,我也是通過偶然的機會才接觸了這門可以用 “優(yōu)美”來形容的程序設(shè)計語言:在大二下學(xué)期的時候介时,數(shù)據(jù)結(jié)構(gòu)課程的一道習(xí)題讓我百思不得其解沸柔,于是我就上網(wǎng)尋找答案褐澎,最后在某個編程網(wǎng)站上找到了參考方案工三。不過奸鬓,代碼是用一種我沒見過的語言編寫的全蝶。之后的事情自然是我從網(wǎng)上下載了Python的解釋器和文檔抑淫,把Python當(dāng)作新玩具一樣愛不釋手地輸入一行行代碼去試驗和探索始苇。當(dāng)時那種久違的興奮和震驚,只有在小學(xué)學(xué)習(xí)Logo語言初次接觸程序設(shè)計的時候才有過荣月。
為了能夠更系統(tǒng)地了解Python哺窄,我開始尋找教程。學(xué)校圖書館只有一本《新華字典》大小的Python手冊生年,使用的版本還是2.0版抱婉。無奈中只好求助于網(wǎng)絡(luò),最初找到了兩本教程:其中一本是很多國內(nèi)Python愛好者的啟蒙教程侵贵,后來由著名Python社區(qū)啄木鳥組織翻譯的《深入Python》窍育,另外一本就是本書的前身Practical Python漱抓;接著我順藤摸瓜査到了剛剛出版的本書第1版的英文版瞬逊。在試讀了幾頁內(nèi)容之后确镊,我萌生了和朋友一起翻譯的想法,不過旨巷,當(dāng)時只是將其作為一種“強迫”自己將原版文字掰開來揉碎了進行理解的方式。在完成前十章后懈万,譚穎華老師通過MSN聯(lián)系到我口予,吿訴我本書已經(jīng)由圖靈公司引進煤辨,希望能夠使用我們的翻譯版本。
對我來說鹃彻,興奮過后感受到了前所未有的壓力团赁。事實上就算我預(yù)料到了可能的困難,卻低估了其難度。出版社耐心地等待我們花了相當(dāng)長時間完成了第1版绿淋,之后卻被吿知原書第2版已經(jīng)上市。接下來我們又只好逐行對照兩個版本的區(qū)別進行更改冯吓。由于第2版中增加了大量的Python 3.0相關(guān)的內(nèi)容,這項工作實際上比第1版翻譯還要耗費精力。不過這也給了我們修正第1版錯誤、對語言進行潤色的難得機會。
嚴格來說薯鼠,本書前幾章都在介紹最基本的程序設(shè)計理念,例如極限編程、面向?qū)ο蟪绦蛟O(shè)計步做,對于富有經(jīng)驗的開發(fā)人員,特別是從C/C++或其他語言轉(zhuǎn)型過來的開發(fā)人員來說,可以直接跳過這些章節(jié)挑胸。但對于沒有多少開發(fā)經(jīng)驗或者準備以Python進行編程入門的新手來說茬贵,這些章節(jié)則是不容錯過的螟左。作者對Python語言的各個方面的剖析準確而到位巷嚣,各部分會花上不同篇幅確保讀者理解而又不會浪費時間砸抛。書中各個章節(jié)分工明確奔誓,對Python從語法到編譯打包和措、從測試到GUI程序的各個方面都進行了介紹并輔以大量實例。
無論是經(jīng)驗豐富的髙手還是初出茅廬的新人蜕煌,本書最后的10個項目都是難得的練手機會——這也是本書不同于其他Python教程的特色之一派阱。這10個項目基本覆蓋了前面章節(jié)所提到的各種知識點,同時又不乏趣味性和實用性斜纪。
本書第2贫母、3、9盒刚、11腺劣、14、17和21章由曾軍崴翻譯因块,其余章節(jié)由司維翻譯橘原。譚穎華老師負責(zé)全書的統(tǒng)稿和潤色,并且承擔(dān)了第2版中大部分章節(jié)的瑣碎繁雜卻重要的更新工作涡上。雖然我們盡力保證譯文的正確和通順趾断,但限于自身的程序設(shè)計和文字表達水平,問題在所難免吓懈,希望讀者在容忍的同時能夠指正歼冰,在論壇、Blog或者圖靈網(wǎng)站上指出都可耻警。希望此譯本能在讀者學(xué)習(xí)Python以及推廣這門語言方面有所幫助隔嫡。
二、作者序
新版的《Python基礎(chǔ)教程》終于和大家見面了甘穿。如果算上這本書的前身Practical Python實際上這已經(jīng)是第3版了腮恩。這本書也讓我投入了近10年時間,這期間温兼,Python發(fā)生了許多有趣的變化秸滴,我也在盡力更新我對這門語言的介紹。同時募判,Python也面臨著在相當(dāng)長的一段時間內(nèi)最具標(biāo)志性的變化:推出了第3版荡含。在本書撰寫時,最終版本還沒有發(fā)布届垫,但是其特性已躍然紙上释液,并且已經(jīng)推出了幾個可用的版本。這次升級帶來一個很有意思的挑戰(zhàn)装处,就是它不再向下兼容误债。換句話說,它并不是簡單地增加一些功能,讓我可以挑挑撿撿地寫進書中寝蹈。它同時還會改變已經(jīng)存在的語言李命,也就是說Python 2.5版本中的某些特性在新版本將不會保留。
要是整個Python社群都立即著手轉(zhuǎn)換到新版本箫老,更新所有遺留代碼封字,那當(dāng)然不會有什么問題。我只要講解新的語言就可以了槽惫!但是周叮,大量用舊版編寫的代碼還會存在,并且仍然有可能繼續(xù)編寫界斜,直到第3版完全板上釘釘仿耽。
那么,怎么應(yīng)付這個變化呢各薇?首先项贺,就算新版本有些不兼容的改變,但語言的大部分還是相同的峭判。也就是說开缎,如果我的程序完全用Python2.5編寫,基本上在Python3上也能運行(在兼容版本2.6版上更不成問題)林螃。對于那些不再正確的部分奕删,我則比較保守一些,并且猜測Python 3完全被大家接受還需要一定時間疗认。本書基本上基于2.5版本完残,顯著的改變會通過文字體現(xiàn)出來。除此之外横漏,我還增加了一個附錄D谨设,概要介紹了一些主要改變。對于大多數(shù)讀者來說缎浇,我覺得應(yīng)該夠了扎拣。
在撰寫本書第2版時,我得到了許多人的幫助素跺。就像在寫前兩版(本書第1版和之前的Practical Python)一樣二蓝,Jason Gilmore扶我上馬,并且在項目進展的過程中扮演了重要角色指厌。Richard Dal Porto刊愚、FrankPohlmanr和Dominic Shakeshaftft過程中也常助我一臂之力。Richard Taylor至關(guān)重要仑乌,他要確保代碼完全正確(如果還是有錯百拓,大家罵我好了),而Marilyn Smith為我的寫作潤色不少晰甚。 我還要感謝Apress的其他同仁們衙传,包括 LizBerry、Beth Christmas, Steve Angli和Tina Nielsen,還有那些幫我修訂錯誤以及提出寶貴意見的讀者們厕九,其中包括Bob Helmbold和OWaclaw Kusnierczyk蓖捶。 當(dāng)然,我還要感謝所有那些將本書的前兩版本買回家的讀者們扁远。
三俊鱼、第一版前言
幾年前,Jason Gilmore建議我為Apress出版社寫本書畅买。他讀了我的在線Python教程并闲,希望我以類似的風(fēng)格撰寫一本書。我受寵若驚谷羞,也很興奮帝火,還有點緊張。最讓我擔(dān)心的就是寫書要花費多長時間湃缎,以及它對于我的學(xué)業(yè)(我當(dāng)時是博士生)有多大影響犀填。這件事結(jié)果成了一項艱巨的任務(wù),而且花的時間比我預(yù)期的長很多嗓违。幸運的是九巡,它沒有過多地影響我的學(xué)習(xí),我也按時獲得了博士學(xué)位蹂季。
去年冕广,Jason又聯(lián)系了我。Apress出版社希望修訂本書乏盐,問我是否有興趣佳窑。那時候我正忙著熟悉新的副教授職位,而幾乎所有的業(yè)余時間都用來扮演皮爾?金特(PeerGynt)了父能,所以時間又變成了主要問題神凑。最終(在事情安排妥當(dāng)一些,而且我也有更多的業(yè)余時間之后)何吝,我同意了修訂那本書溉委,而本書(我相信你已經(jīng)猜到了)就是最終的成果。大多數(shù)的資料都是從本書的第1版Practical Python (Apress, 2002)中拿來的爱榕。本書基于Python語言的最新更新瓣喊,對現(xiàn)有的內(nèi)容進行了全面的修訂,增加了幾個新章節(jié)黔酥。有些舊的內(nèi)容也進行了重新分配藻三,以適應(yīng)新的結(jié)構(gòu)洪橘。我從讀者那里得到了不少關(guān)于第1版的正面反饋——所以我希望能夠繼續(xù)保留讀者所喜愛的特點,并且錦上添花棵帽。
如果沒有其他人對我的持續(xù)幫助和鼓勵熄求,這本書是無法完成的。我衷心地感謝他們逗概。特別要感謝在本書撰寫過程中和我一起工作的團隊:Jason Gilmore,感謝他落實了這個項目并且將項目引導(dǎo)至正確的方向弟晚!Beckie Stones,感謝她將所有內(nèi)容整理在一起,Jeremy Jones和MattMoodie逾苫,感謝他們專業(yè)的意見和洞察力卿城;Linda Marousek,感謝她對我如此耐心。我還要感謝團隊中的其他人铅搓,感謝他們讓這個過程變得如此順利瑟押。但是如果沒有那些在前一版本中和我一起工作的人所付出的努力,這本書也是無法完成的星掰。我要感謝Jason Gilmore和Alex Martelli勉耀,感謝他們杰出的技術(shù)編輯工作(Jason負責(zé)整本書,Alex負責(zé)前半部分)以及工作職責(zé)之外的修改意見和建議蹋偏,Erin Mulligan和Tory McLeam,感謝他們在撰寫過程中和我共同進退便斥,在我需要的時候給予我敦促;Nancy Rapoport,感謝她對我的文稿進行潤色威始,Grace Wong,感謝她在別人無法回答的時候給予我答案枢纠。Pete Shinners對項目十的游戲給過我一些有幫助的建議,我非常感謝她黎棠。對本書感到滿意的讀者也給我發(fā)來了郵件晋渺,這極大地鼓舞了我的斗志,感謝你們脓斩!最后木西,我要謝謝我的家人和朋友,以及我的女朋友Ranveig随静。在撰寫本書的過程中八千,他們一直都寬容地陪伴著我。
四、前言
編寫C程序就像拿著剃刀的人在剛打過蠟的舞場內(nèi)跳快舞⊥蚍——Waldi Ravens
C++:難以學(xué)習(xí),生就如此沸停。——匿名
Java在很多方面就像是C++昭卓》呒兀——Michael Feldman
現(xiàn)在請看一種前所未有的表演…… ——Monty Python的作品《飛行的馬戲團》
我引用了別人的幾句話來定下本書的基調(diào)瘟滨,這當(dāng)然很不正式。為了讓大家可以輕松地閱讀本書能颁,我試圖用一點幽默的方式來討論Python編程的主題室奏。幽默是Python社區(qū)的傳統(tǒng),而很多幽默都和Monty Python[Monty Python是20世紀70年代風(fēng)靡全球的英國六人喜劇團體劲装。]的滑稽短劇有關(guān)。所以我舉的一些例子可能看起來有些傻昌简,希望你能夠接受占业。(Python這個名字是從Monty Python借鑒來的,而不是源于那條大蟒蛇纯赎。)
在這個前言中谦疾,我會簡單地吿訴你Python是什么,為什么你應(yīng)該使用它犬金,誰應(yīng)該使用它念恍,本書的讀者群是誰以及本書是如何組織的。
那么晚顷,什么是Python,為什么你要使用它呢峰伙?還是引用官方的說法吧(http://www.python.org/ doc/essays/blurb.html),Python就是“一種解釋型的该默、面向?qū)ο蟮耐ァв袆討B(tài)語義的髙級程序設(shè)計語言”。這句話中的很多術(shù)語栓袖,你可以在閱讀本書的過程中逐漸弄懂匣摘,但最重要的是,Python是一種使你在編程時能夠保持自己風(fēng)格的程序設(shè)計語裹刮,你不用費什么勁就可以實現(xiàn)你想要的功能音榜,并且編寫的程序清晰易懂(和當(dāng)前流行的其他各種程序設(shè)計語言相比更是如此)。
盡管Python可能不會像C或者C++那樣的編譯型語言一樣快捧弃,但是Python依然值得一用赠叼,因為它可以讓你節(jié)約編程時間,而大多數(shù)程序的運行速度差異可能并不是么顯而易見违霞。如果你是個C程序員梅割,你可以在以后輕松地用C實現(xiàn)程序的關(guān)鍵部分,讓它們和使用Python編寫的部分相互協(xié)作葛家。如果你之前沒有任何編程的經(jīng)歷(而且可能被我前面提到的C和C#的話唬住了)户辞,那么既簡單又強大的Python就是你入門的完美選擇。
那么誰該使用Python呢癞谒?自從Guido van Rossum在20世紀90年代初創(chuàng)造這門語言以來底燎,它的支持者就一直在穩(wěn)步增加刃榨,而且近些年來,社區(qū)對它的興趣也日益濃厚双仍。Python廣泛用于系統(tǒng)管理工作(比如它是很多Linux發(fā)行版的重要組成部分)枢希,它也可以用于教授零起步的入門者編程。 NASA在它的幾個系統(tǒng)中既用Python開發(fā)朱沃,又將其作為腳本語言苞轿。Industrial Light & Magic在高預(yù)算影片中使用Python制作影片的特效,Yahoo!使用它(包括其他技術(shù))管理討論組逗物,Google用它實現(xiàn)Web爬蟲和捜索引擎中的很多組件搬卒。Python正在用于計算機游戲和生物信息等各種領(lǐng)域。不久后可能就會有人問了:“誰不用Python呢翎卓?"
本書面向那些希望學(xué)習(xí)如何使用Python編程的讀者契邀,其內(nèi)容適合廣泛的讀者群,不管你是程序設(shè)計的新手還是髙級計算機用戶失暴。如果你之前從未寫過程序坯门,那么你應(yīng)該從第1章開始閱讀,直到你覺得所學(xué)的內(nèi)容對你來說有些超前了(真的有可能會這樣)逗扒,此時你就應(yīng)該開始實踐古戴,編寫自己的程序,待時機成熟矩肩,你就可以再回到書本上允瞧,學(xué)習(xí)那些更復(fù)雜的內(nèi)容了。
如果你已經(jīng)知道如何編程蛮拔,那么述暂,你對一些介紹性的內(nèi)容一定不會感到新鮮了(但是,文中可能到處都有一些讓人驚訝的細節(jié))建炫。你可以快速閱讀前面的章節(jié)畦韭,從而了解Python是如何工作的,或者閱讀附錄A肛跌,它是基于我的在線Python教程“Instant Python”寫成的艺配。它會讓你快速了解很多重要的Python概念。有了大概印象后衍慎,你可以直接跳到第10章(討論Python標(biāo)準庫)转唉。
本書的后半部分包括10個程序設(shè)計項目,展示了Python語言的不同功能稳捆。不管是新手還是專家,都會對這些項目感興趣赠法。盡管后面項目中的一些內(nèi)容對于沒有經(jīng)驗的程序員來說可能有些難, 但是(在讀完本書的前半部分后)按照項目順序完成應(yīng)該還是可能的。
這些項目包括了多方面的主題乔夯,多數(shù)對你編寫自己的程序都很有用砖织。你可以學(xué)會做一些你現(xiàn) 在完全不會做的事情款侵,比如創(chuàng)建聊天服務(wù)器、點對點的文件共享系統(tǒng)或者功能完備的計算機圖形游戲等侧纯。乍一看新锈,你會覺得很多內(nèi)容都很難,但是到了最后眶熬,我想你會驚訝于它們實際上是如此簡單妹笆。如果你想下載源代碼,可以訪問http://www.apress.com娜氏。
好了拳缠,冗長的介紹我自己都覺得煩了,郞么我們就開始學(xué)習(xí)Python編程吧牍白,從第1章或者附錄A開始。祝你好運抖棘,編程愉快茂腥。