官术网_书友最值得收藏!

前言

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章將進行介紹。

讀者應了解如何在計算機上使用命令行及相關基礎命令,尤其是相對路徑和絕對路徑,以及導航文件系統。如果還不知道這些,建議先學習一下再來閱讀本書。

讀者應該有穩定的互聯網連接(即便不夠快),以支持文檔查閱和偶爾進行包的下載。當然,書中示例已盡可能設計成沒有互聯網也可以工作。

現在,去準備一杯你最愛喝的飲料,拿好筆記本和筆,在計算機前坐穩,讓我們開始吧!

主站蜘蛛池模板: 合阳县| 娱乐| 霍山县| 连云港市| 榆林市| 阿坝县| 奈曼旗| 徐闻县| 新乐市| 永新县| 维西| 高清| 阳谷县| 拉孜县| 罗江县| 襄城县| 顺平县| 桐梓县| 肥西县| 大竹县| 黄冈市| 临漳县| 克什克腾旗| 宁都县| 成安县| 普陀区| 湖北省| 读书| 甘南县| 吉林省| 黄冈市| 裕民县| 佳木斯市| 桦甸市| 衢州市| 峨眉山市| 河曲县| 秦安县| 吴忠市| 宝清县| 财经|