- Python編程從新手到高手
- (美)賈森·C.麥克唐納
- 4111字
- 2025-08-07 17:53:03
前言
Python這門語言很獨特。作為一名軟件開發者,我沉迷于其特殊性。編寫良好的Python程序能令人感受到一種藝術美。我喜歡探尋對于一個問題最“Pythonic”(具有Python特質精神的)解決方案,然后回顧并思考是否有其他方案能獲得相同效果。
遺憾的是,多年以前,我習慣于從已掌握的其他編程語言的角度來看待Python,從而陷入困境。那時,我雖然可以讀、寫Python代碼,但無法形成那些“顯而易見”的慣用編程模式。就像只能通過查閱詞典來生硬地說外語一樣——我雖然能編寫出Python代碼,但是無法真正基于Python來思考問題,我其實錯失了這門語言的本質內涵。
直到我開始真正理解Python——用它來思考,我才發現這門語言的獨特之處。解決方案變得顯而易見。設計方案變成一種樂趣,而不是一個謎團。
當一位新程序員開始嘗試使用Python時,他幾乎沒有先入為主的偏見,因為沒有其他編程語言作為“母語”來干擾他對Python的探索。但是對于將Python作為第二甚至第三語言的老程序員,思想上的轉變在某些方面要艱難得多——他們不僅必須學習新知識,而且在很多方面必須忘掉舊知識(這尤其困難)。
本書正是這一艱難旅程的最佳指南。
本書為誰而寫?
本書適合想要學習編寫專業Python程序的讀者閱讀,無論是零編程基礎的讀者,還是已掌握其他編程語言的開發者。本書特別關注如何以“Pythonic”方式來完成任務,可以幫助讀者不受其他編程語言的影響來學習地道的Python編程方法。
如果你是一位中級Python開發者,一樣能發現本書很有用。盡管我使用Python很多年了,但是對其中的一些主題,我直到最近才突然感到豁然開朗。本書包含了對這些主題的解釋。
“簡單”到底是什么意思?
本書的所有主題,乍一看可能都不簡單。讀者可能也會懷疑,這么厚的書,怎么可能“簡單”?
我為本書起名為“Python超簡單”[1],其實是想描述讀者閱讀完本書后的體驗,而不是讀之前的期待。我們應該認識到,任何值得學習的主題,在初次接觸時,都會令人感覺不可逾越。同樣,任何概念如果值得向一名軟件開發者闡述,都必須具備足夠的深度,以致喪失“簡單”這種先驗性標簽。
[1] 譯者注:本書英文原書名為“Dead Simple Python”,即“Python超簡單”。
本書的目標是讓讀者在閱讀完每章后,無論這章的主題最初看起來多么復雜,都能不禁感嘆:這些內容其實是顯而易見的,實際上“超簡單”!此時,讀者就可以像使用母語一般自然地使用Python進行思考。
為了幫助讀者達到這種理解程度,本書通常從各主題的最基礎、最明確的形式開始:先確立一個基點,再一層層疊加,最終形成慣用模式。本書希望通過這種方式,讓讀者精確又舒適地理解Python每個功能的由來以及慣用模式。
書中包含什么內容?
本書共5個部分。和其他面向初學者的圖書不同,本書假定讀者想盡快開始編寫代碼,且編寫出的代碼能達到產品級質量(而不是特別簡單的示例代碼)。本書需要讀者事先完成一些初步工作,這樣可以確保讀者更容易地將新知識應用到實際項目中,并獲得反饋。
第一部分“Python環境”(第1~4章)讓讀者首先掌握Python的基礎知識,包括Python的哲學、開發環境、基本語法、項目結構和代碼導入。這將為讀者編寫產品級代碼奠定堅實的基礎。
第二部分“基本結構”(第5~8章)探索Python的變量、數據類型、函數、類、對象、錯誤和異常等基本結構,并講解如何充分利用它們。
第三部分“數據和流程”(第9~12章)介紹操作數據和控制執行流程的許多獨特方法,包括集合、迭代、生成器、推導式、文本輸入/輸出、上下文管理、二進制和序列化等。
第四部分“高級概念”(第13~17章)揭示各種可以令讀者編寫出更強大的代碼的高級策略,包含繼承、混入、元類、抽象基類、自省、泛型、異步、并發、線程和并行等。這些正是以往多數課程和圖書中略過的各種“可怕”主題。
第五部分“超越代碼”(第18~21章)講解實際項目的打包、分發、調試、日志、測試和剖析等內容,并介紹各種值得探索的Python應用方向。
書中不包含什么內容?
本書不會過多重復編程的基本概念,例如(從一個與編程語言種類無關的角度來看)什么是變量和函數,以及類和對象之間的區別是什么等。本書僅簡要定義一些必要概念,即那些在編程世界中并不普遍存在的概念。
本書并不想對Python相關主題進行詳盡無遺的討論,而是更多關注原因和方法,以幫助讀者構建堅實的基礎。本書鼓勵讀者通過額外查閱資料來拓展理解,如通過查閱官方文檔了解庫函數等概念。對于標準庫中很多流行的功能,比如隨機數和日期/時間操作等,本書在示例中調用時僅稍作解釋。
為了控制本書的探討范疇,本書不會涉及太多第三方工具和庫。雖然我經常被要求討論Python中默認工具的各種流行替代方案,但由于這些替代方案總是會像季節更替般從“流行”快速變得“失寵”,因此我建議使用默認方案。當然,有零星意外,但僅限于那種在Python生態中無所不在,甚至讓標準庫黯然失色的第三方工具。
一般來說,如果某個第三方工具特別值得關注,本書會向讀者推薦其官方網站和官方文檔。
如何閱讀本書?
本書的目標是成為一本實操手冊,建議讀者從頭按順序閱讀各章。無論是Python新手,還是已經嘗試過一段時間卻感覺沒有掌握要領的Python用戶,都可以從本書中填補許多從未意識到的知識空白。
當然,如果想立即理解某個特定主題,可以直接跳到對應章節開始探索。多數章節其實是獨立編撰而成的,但本書始終默認讀者已經閱讀并理解了前置章節的所有內容。
關于詞匯
幾乎所有Python圖書或在線文章都從其他編程語言借用詞匯,比如元素、變量等。雖然通常認為這樣能有效將Python概念和讀者現有知識關聯起來,但我認為這種詞匯借用最終將適得其反。如果基于其他語言來理解Python,是無法寫出清晰、符合Python慣用模式的代碼的。更重要的是,如果讀者習慣使用不規范的詞匯,就會發現官方文檔難以閱讀。
因此,本書堅持使用官方詞匯。已出版圖書中堅持這一立場的非常少,本書很自豪能成為其中之一。畢竟,想成為當地人,就必須學會使用當地語言。
理論概述
如果基于讀者已掌握的語言,那么讀者的理論庫中總是可能存在一些盲區。比如,Haskell開發者可能不熟悉面向對象編程,C++程序員可能不熟悉函數式編程。
為了消除這些隔閡,本書偶爾會提供理論概述,簡要闡述與某些編程范式、模式相關的基本理論和最佳實踐。所以,如果讀者已經懂得某個特定概念,可以跳過對應的理論概述,直接學習Python領域的特定內容。
主觀或客觀?
其實,從一本技術書中徹底清除個人觀點幾乎是不可能的,尤其是像本書這樣專注于探討慣用法的書。不過,我認為自己已經盡了最大努力來保持客觀。
本書不是我的個人作品,而是從Python社區提煉出的集體智慧的結晶。本書經歷了兩年的激烈辯論,以及研究、實踐,我自身的開發習慣也發生了巨大變化。開始創作本書時的我和現在的我,可以認為完全不是同一個Python開發者了。
即便如此,任何一本書也不可能讓所有人滿意。有時,我不得不在正文中特別提到從未達成滿意結論的辯論。即使那些我認為已經圓滿解決的主題,也可能引發另一些Python開發者的強烈負面反應。事實上,其中有些爭論也激起過我自身的強烈反應,直到我真正理解了它們。
所以我建議大家以開放的心態閱讀本書,即使你自認為早已相當熟悉編程和Python。我在本書中盡力解釋了所有建議背后的理由,也同樣鼓勵讀者在采納任何建議時能以相同的認真程度進行思考。
示例
本書中的大部分示例代碼是我仔細構建而成的,以便展示對應主題是如何實現的。在大多數情況下,我會故意復雜化示例,以強調其他教程經常忽略的問題和意外。對于復雜化的示例,我會指出來,但同時,我也可能會簡化或繞開與當前主題無關的部分。
因此,本書中的示例代碼通常比其他教程中的示例代碼更長,章節篇幅看起來也更長。不用因頁數太多而感到氣餒,一章一章地學習就好。
除非另行說明,書中所有示例都可運行,或者以可預見的方式運行失敗。所有代碼始終遵守Python風格約定。強烈建議讀者親手輸入每個示例的代碼并運行[2]。
[2] 譯者注:但不要只是簡單地輸入,看到正確輸出就覺得大功告成了,這只是探索的開始,只有仔細推敲每行代碼,并最終理解其含義,才能有收獲。
我努力對Python代碼段進行了標注,并將其保存為可運行的示例。我給出了文件名,并對代碼段進行編號(:1、:2,以此類推)。當代碼被修改時,為代碼編號追加字母,比如2b意味著是對代碼段2a的改進,而修改的部分將被加粗。
項目
有人問過我,為什么沒在書中提供一個完整的綜合項目?答案很簡單:本書假定讀者已有自己想開發的Python項目,所以本書不會提供另外一個項目來分散讀者的注意力,而是專注于展示可以直接用于讀者項目的各種工具或方法。
如果讀者還沒有自己的項目,這正是開始的好時機,開始構建你人生中的第一個項目吧!想想你希望得到哪個問題的解決方案(或更好的解決方案),然后開始構建相應的項目。從問題的一小部分開始就好。創建第一個項目并無魔法,只需讓其成為你真正會使用的工具即可。別用“完美”來要求你的第一次嘗試。技術社區中有過斷言:“你總是會拋棄第一個。”所以一開始不用害怕哪兒構建錯了!本書專注于為你提供通向成功的工具。
當然,如果開發一個項目對你而言尚有難度,那么可以先認真完成本書中給出的各項示例。
任何情況下,都強烈建議你創建一個自己的“靶場”[3]項目,在一個安全環境中開始嘗試Python,這樣就不用擔心你的破壞性行為會對其他環境造成損害。本書將在第2章和第3章介紹Python代碼的運行,并在第4章介紹Python項目的結構。在第18章討論實際項目的打包和分發時,將重新討論Python項目的結構。
[3] 譯者注:“靶場”指的是虛擬環境。Python早已融入所有操作系統,千萬不要輕易用sudo等類似指令對系統本身的Python環境進行變更,使用合理的Python虛擬運行時可將私人項目和系統環境隔離。個人推薦使用Miniconda來構建Python虛擬環境。
閱讀本書的準備工作
● 讀者應已掌握編程的基本要點。本書教授的是Python而不是編程[4]。
[4] 譯者注:更準確地講,本書教授的是Python的工程實踐方法。
● 讀者應有可操作的計算機,能運行Python 3.7或更高版本。如果還沒安裝Python,不用擔心,第2章將進行介紹。
● 讀者應了解如何在計算機上使用命令行及相關基礎命令,尤其是相對路徑和絕對路徑,以及導航文件系統。如果還不知道這些,建議先學習一下再來閱讀本書。
● 讀者應該有穩定的互聯網連接(即便不夠快),以支持文檔查閱和偶爾進行包的下載。當然,書中示例已盡可能設計成沒有互聯網也可以工作。
現在,去準備一杯你最愛喝的飲料,拿好筆記本和筆,在計算機前坐穩,讓我們開始吧!
- What's New in TensorFlow 2.0
- 微服務與事件驅動架構
- 控糖控脂健康餐
- NLTK基礎教程:用NLTK和Python庫構建機器學習應用
- Python數據分析(第2版)
- 你必須知道的204個Visual C++開發問題
- 領域驅動設計:軟件核心復雜性應對之道(修訂版)
- HTML5權威指南
- Spring+Spring MVC+MyBatis從零開始學
- 玩轉.NET Micro Framework移植:基于STM32F10x處理器
- Qt 4開發實踐
- Mudbox 2013 Cookbook
- 程序員的成長課
- 百萬在線:大型游戲服務端開發
- CryENGINE Game Programming with C++,C#,and Lua