Python一行流:像專家一樣寫代碼(簡體書)
商品資訊
商品簡介
本書專注於從初學邁向進階的Python編碼技術:如何像專家一樣寫出優雅、準確、簡潔高效的Python 單行代碼;閱讀任意一行Python 代碼時,如何系統性地對其進行拆解和分析。全書分為6 個章節,以單行代碼切入計算機科學的各個領域,包括Python 語言基礎、程序設計技巧、基於NumPy的科學計算、機器學習的主要算法模型、規則運算式進階、計算機科學中若干經典算法的單行實現等。
作者簡介
Christian Mayer是一位元計算機科學博士,也是知名Python網站創始人和維護者。該網站非常活躍,訂閱人數已經超過 2萬且仍在持續增長。他的網站不僅發展迅速,也幫助數以萬計的學習者提升了編碼技能和優化了在線業務。他同時也是CoffeeBreak Python系列自出版圖書的作者。譯者蘇丹,網上id一般為su27,2009年畢業於北京師範大學數學系,主要從事後端程序設計,也曾從事前端與用戶端開發工作。目前為豆瓣使用者產品後端負責人,日常跟Python打交道較多。2016年翻譯出版《深入理解 Flask》一書。
譯者蘇丹,網上id一般為su27,2009年畢業於北京師範大學數學系,主要從事後端程序設計,也曾從事前端與用戶端開發工作。目前為豆瓣使用者產品後端負責人,日常跟Python打交道較多。2016年翻譯出版《深入理解 Flask》一書。
名人/編輯推薦
《Python一行流》會教你閱讀和編寫一行流程式,系統性拆分和理解任意一行Python代碼,像專家一樣得心應手地編寫強壯、緊湊的Python程式。本書有5個章節,覆蓋了程序設計技巧、規則運算式、機器學習、資料科學的核心課題,以及許多有用的算法。通過對單行程式範例的詳細介紹,本書解釋了計算機科學的關鍵概念,並可用來提升編碼與分析的重要技能。你會學到Python的進階功能,例如列表解析、切片、lambda函數、規則運算式、map和reduce函數,以及切片賦值等。還將學到以下內容:
√ 借助各種資料結構解決真實世界的問題,例如用布林索引從資料集中找出污染超過平均水準的城市。
√ 使用NumPy的基礎功能,如陣列、形狀、軸、類型、廣播、高級索引、切片、排序、搜索、聚合以及資料分析等。
√ 使用K-Means算法進行無監督學習,以對高維陣列中的資料進行分析。
√ 編寫更高級的規則運算式,會用到組與命名組、前向否定、轉義字元、空白字元、字元集(以及反向字元集),以及貪婪/非貪婪操作符。
√ 理解一系列計算機科學主題,包括異形詞、回文、冪集、排列、階乘、素數、斐波那契數列、混淆加密、查找和排序算法。
序
推薦序一:幹一行,愛“一行”
幾年創業,幾經浮沉,我又回到了編碼一線,重拾寫代碼的樂趣。幸好當年讀過幾本經典書籍打底,如今重操舊業,尚能遊刃有餘。感慨中剛好春雨兄找我為《Python一行流》作序,讀來很有感觸,堪比當年經典,便欣然應允。
其實我一直是“一行流”的愛好者。早在使用 Python 2.3 版本的時代,我便嘗試如何用一行代碼完成字串裡的字元排序,並將過程和結果記錄在博客 1 上。雖然自從 Python 2.4 版本增加了 sorted()函數後我的奇技淫巧便沒了用武之地,但這種追求精確與極簡的 Pythonic 哲學持續地影響著我,多年後我以改善 Python 程式為名出版了自己的第一本書。
與我的淺嘗輒止不同,這本書把一行流當作了一個研究課題,所以整書極具體系。作者從 Python 語言、庫和算法多個層面和角度去探尋更簡明的代碼寫法,有助於讀者建立深入挖掘語言特性的動力,最終提升讀者的知識水準,寫起代碼如臂使指,“碼”上生花。我曾在網上分享過一段利用數字圖像形態學實現茶濾孔數計算的Python 程式,需要 80 行代碼,而網友 Arkbird 用一行 mathematica 代碼完成同樣的算法,“我看不懂,但我大受震憾。” 讀者們紛紛點讚。編寫一行流的代碼是一個“好程序員”的普遍追求,也是對語言、庫和算法的掌握程度和編碼能力的體現,但閱讀本書顯然有助於此,讀完本書後我編寫了自己的“一行流”版本:
print(("holes count: ", s := __import__(skimage, fromlist=[measure, morphology,io]))[0],
s.measure.label(s.morphology.binary_opening(s.io.imread("sample.png", as_gray=True) <0.5, selem=s.morphology.square(3)), return_num=True)[1])
代碼行數“濃縮”80 倍之後,性能也提升了 37 倍,同時自我感覺對 Python 語言、skimage 庫和數字圖像算法的理解更進了一步。許多初學者入門後陷入不知道能用 Python 做什麼的困惑,不妨讀一下這本書,然後嘗試把之前寫過的代碼改為“一行流”風格,應該能大有所獲。
本書譯者蘇丹網名 su27,他是圈內馳名“文藝青年”,前幾年一直聽說他在寫小說,搞文學創作。作為長年混跡文青基地豆瓣網的程序員,這並不奇怪,奇怪的是他突然翻譯了這本書。不過 su27 畢竟是在 Python 的“黃埔軍校”豆瓣團隊中成長起來的,這對本書的質量提供了保障。在閱讀這本書的過程中,也印證了我的所想,整本書清晰明瞭,極具美感,加上作者精心編排的知識體系,讀來如上雲梯,愉悅中知識就獲得了提升,是以為序。
——賴勇浩
廣州齊昌網絡科技有限公司創始人兼總經理
《編寫高質量代碼:改善Python程式的91個建議》作者
推薦序二:Su27 般大氣淩然
(Su27 當然比 Mig29 大氣)
一直以為 Su27 在寫科幻小說,
突然邀請來為新書寫序,
只能感歎:
不會寫科幻小說的程序員一定不是好翻譯
一看內容,更感歎,探討領域竟然如此“宅”:
專注揭露
如何在 Python 中
編寫能濃縮在單行的
神級 Pytonic 代碼
講真,Guido 老爹當年將 lambda 引入 Python 時,就勸過:
函式程序設計雖好,可別貪杯;
為此專門重新設計語法,
將 Python 構造為唯一基於排版來劃分語法層次的通用指令碼語言;
要知道,其它通用語言都通過識別字
(比如:{} begin end)來劃分代碼塊,
本質上無論軟件由多少行構成,
都可以寫在一行裡,
而編譯器照樣可以完美解析;
(實際上,很多混淆器就是這麼幹的.)
這樣一來,
在 Python 中無論初中高級,
大家寫出來的代碼,
都會很相似,
很直白,
結構很清晰
但是,
腦力過剩的程序員當然要為智商尋求宣洩,
果斷發現 Python 內置的炫酷可能性:
通過列表推導式,
就可以輕易繞過縮進規約,
將幾個想法集中進一行,
配合 Lambda 就可以將更多行為集成到一行中;
立即,
代碼看起來就不那麼泯然眾人矣 -> 第一眼根本看不明白要幹什麼
確實,這些可能性,
畢竟是老爹精心掩埋的珍寶,
以往也只有零星文章介紹幾個案例,
這次是一整本書,可以大大過癮;
翻譯沒毛病,老程式猿了;
版式也夠 geek,
清晰區分了內容/代碼/注釋/點評;
(可惜,譯者太自謙,
沒好意思大力插入豐富譯注,
將自己經驗也配套給出,
下個版次,值得追加.)
內容上,結構清晰,
從語法,到模組,
到協力廠商模組,
並第一時間構建了自己的 元述式:
0: 問題闡述
1: 常規處理
2: 一行流代碼
3: 如何工作的? 解析
這樣一個個案例,
就象一片片精緻的卡片,
有序拼貼起來,形成 一行流 小世界,
同時,
每個案例故事,
又都是能獨立使用的,
隨時可以拎出來用在具體工程中;
這應該是流式圖書構建法
只可惜,沒見到 海象運算式:= 相關案例,
這種新語法在 Python 3.8 中正式引入,
支持直接在列表推導式中進行複雜的判定,
結合反覆運算工具,簡直可以在 ["列表"] 中構造整個兒世界;
真心建議,在修訂版中,Su27 親自補一章,將:= 結合到實用場景中,
作為中國版一行流大補丁,回饋回作者心上.
——大媽/ZoomQuiet PyUG 聯合創始人,蟒營 ® 創始人
推薦序三
看到 su27 老師翻譯的這本書,我不禁啞然失笑,十幾年前我還在中國 Python 用戶組的郵寄清單裡活躍的時候,經常花大量精力和同好們討論怎麼把一段程式寫成一行流,一定要找出既簡潔又高效的方法來才肯甘休,樂此不疲。從這個遊戲出發,逐步形成了如何寫出更加 Pythonic 的代碼來的認知,而這個美學層面的認知升級,我至今受益不止。編碼是快樂的,希望有更多人能從這種“尋找極致”的過程中,體會到代碼之美。
——洪強寧 雅識科技聯合創始人兼CTO
推薦序四
談起 Python,從 2000 年到 2021 年,一門陪伴了我 20 多年的程序設計語言,其他語言大多是生命的過客,或者因為某些需求臨時起意而去學習使用,但唯獨 Python,從始至終用到了現在,但即便用了這麼久,都不敢輕言對於 Python 已經徹底瞭解,尤其談起一行流,更是各種程序設計語言論壇裡最愛比拼的項目之一,所謂一行流,就是能不能把一個功能用一行代碼去實現,Python 的一行流既保證了代碼的簡潔,又不會犧牲很大的可讀性,但一個看似如此簡單的事情,如果不對這門程序設計語言掌握的非常透徹,是很難做到的。如此有趣的主題,這麼多年來,卻很少看到這個主題的圖書,這次有幸讀到這本書,也從中學到了很多,尤其是機器學習和算法兩個章節,讀過之後感覺醍醐灌頂,馬上就可以把所學應用到日常工作中去了。同時,本書的翻譯者 su27 老師本身也是資深的 Python 開發者,在翻譯的準確度和流暢度方面,本書也遠超同類圖書。最後,很榮幸為此書寫序,甚感開心,預祝此書大賣,能夠幫助到更多的 Python 學習者與開發者。
——清風 前豆瓣技術總監,開 PA 創始人
推薦序五
《Python 一行流》 是一本適合 python 程序員進階的書,幫助讀者更好地領悟python 程序設計的思維方式。整本書從解決實際問題出發,通過一行流的形式,簡潔清晰的解決問題,很多例子都給出了非常新穎的角度。更為難得是,作者並非一味的追求一行流,在多行代碼能夠帶來更好閱讀性的時候,作者也欣然推薦指出此處一行流的不住。蘇老師的翻譯流暢準確,閱讀起來非常舒服,無論是中階 python 程序員還是高階程序員,相信通過閱讀此書都能有所收穫。
——彭宇 豆瓣平臺架構負責人
譯 者 序
大約 14 年前,我是個前端程序員,雖然沒學過 Python,但小夥伴們寫的 Python 代碼十分好讀,我看著就有種無師自通的幻覺,有時候自己也寫一些。雖然能跑通,但老覺得不對勁,生澀、重複、結巴,好像剛學了兩天英語就非要跑去跟老外聊天一樣。有個後端工程師叫 PY(巧了不是?),我有時就把自己寫的發給他,讓他幫我改,我想要“像 Python 一些”,果然他一改就流暢了很多,變得又短又好讀了。那時候我也幫後端改 JavaScript,但現在想來當時水準十分一般,真是慚愧。
後來我經常想,到底是什麼讓代碼看起來“更 Python”了。是一些 Python 獨有的關鍵字和語法嗎?是函數式程序設計嗎?是強大的動態特性嗎?是黑魔法元程序設計嗎?
也許是,又不是。寫了多年後端,我仍然不認為自己掌握了其中的秘訣,但我知道竅門一定隱藏在一行行樸實、優雅又節制的 Python 語句之中。
最近看了不少年輕朋友的簡歷和筆試答卷,很多人簡歷上寫了“熟悉 Python”,甚至做過 Python 項目,用 Python 寫了網站或者應用程式之類。但打開筆試中實際的Python 代碼,有時候只需要兩三行,就能看清底細。也許程式能跑通,甚至答案也對,但就是知道他們跟 Python 一點都不熟;他們知道 Python 的語法,但又不知道Python 怎麼寫;該簡潔的地方冗長,該清晰的地方意義不明,充滿了多餘的迴圈和分支,毫無技巧可言,不會用規則運算式,更不要提不規範的空格和換行。讀這樣的程式讓人焦慮煩躁,到處都在浪費空間、性能和閱讀者的時間,到處都在催促我趕緊把頁面關掉。看多了這樣的程式,會讓我覺得 Python 很沒意思。
我想,或許他們實力不弱,但如果把這樣的代碼貢獻到開源社區,恐怕每一行都會經受一番嚴厲的拷問。也許他們的確花了不少時間在學習和練習使用 Python,但可惜沒有接觸過真實世界的合作開發,沒有經受過複雜項目的代碼審核,沒有一個人或者一本書確切地告訴他們,如何把簡簡單單的一行 Python 代碼寫好。不僅僅是寫到能通過編譯,而是寫好,這是業餘選手和職業玩家的區別。
第一次看到書名中“一行流”這個詞時,我心中浮現的是 JavaScript 的單行程式打包器,或者 C 語言混亂代碼大賽這樣的東西,很多語言都有在一行代碼中玩出各種花樣的奇技淫巧。但我又注意到,這是一本 Python 的書。常識告訴我,沒有任何一本講 Python 的書敢違反至高無上的《Python 之禪》(尤其是“Readability counts”)。
果然,這本書講的正是我覺得十分重要,但一直少有專著的主題:如何寫出真正Pythonic 的單行程式。在這一主題下,作者從基礎出發,一步步增加挑戰。在我看來,他把這個問題在本書中分為幾個層次,按照挑戰難度及章節的前後順序教你:
1. 如何把你的每一行程式寫得簡潔漂亮、Pythonic。
2. 如何僅用一行程式,巧妙地解決實際問題,但又不會過分聰明以至於影響可讀性,並且滿足第一條。
3. 使用 Python 可以涉足計算機科學的哪些領域?全都用一行程式搞定,同時還得滿足前兩條。
《Python 之禪》有雲,達成某個任務的最佳編碼方式,有且僅有一種。這導致在Python 範疇內討論單行程式的威力,是需要極度謹慎的,因為即便再精妙和強大的單行程式,如果它不是“那一種”方式,就沒有人會在實踐中使用,也就只是個玩具,而沒有實用的價值。作者在選擇例子的時候十分小心,即使再複雜的例子,理解之後也會覺得,確實是最好的選擇。同時也會為之驚歎,短短一行,竟有如此強大的能力,就算是在機器學習、科學計算這種專業程度很高的領域也能遊刃有餘。
希望手頭的這本小書,能為 Python 玩家“打怪升級”提供一件稱心的裝備,做一盞指路明燈,驅散迷霧,打開地圖視野,明確職業生涯前進的路線。
目次
導語 ........................................................................................................................ 1
Python 一行流的例子 ................................................................................................... 2
關於可讀性的說明 ....................................................................................................... 3
這本書是給誰看的? ................................................................................................... 4
你會學到什麼? ........................................................................................................... 5
在線資源 ....................................................................................................................... 6
1 Python 溫故知新 ................................................................................................ 7
基本資料結構 ............................................................................................................... 8
數值資料類型和結構 ........................................................................................... 8
布林值 ................................................................................................................... 8
字串 ................................................................................................................. 11
關鍵字 None ....................................................................................................... 12
容器資料類型 ............................................................................................................. 13
列表 ..................................................................................................................... 13
堆疊 ..................................................................................................................... 16
集合 ..................................................................................................................... 17
字典 ..................................................................................................................... 19
成員 ..................................................................................................................... 20
XVIII Python 一行流
清單和字典解析 ................................................................................................. 20
控制流 ......................................................................................................................... 21
if、else 和 elif ..................................................................................................... 21
迴圈 ..................................................................................................................... 22
函數 ............................................................................................................................. 24
lambda 函數 ................................................................................................................. 24
總結 ............................................................................................................................. 25
2 Python 技巧 ..................................................................................................... 27
使用列表解析找出最高收入者 .................................................................................. 28
基礎背景 ............................................................................................................. 28
代碼 ..................................................................................................................... 30
它是如何工作的 ................................................................................................. 31
使用清單解析找出高信息價值的單詞 ...................................................................... 31
基礎背景 ............................................................................................................. 31
代碼 ..................................................................................................................... 32
它是怎麼工作的 ................................................................................................. 32
讀取文件 ..................................................................................................................... 33
基礎背景 ............................................................................................................. 33
代碼 ..................................................................................................................... 34
它是怎麼工作的 ................................................................................................. 34
使用 lambda 和 map 函數 ........................................................................................... 35
基礎背景 ............................................................................................................. 35
代碼 ..................................................................................................................... 36
它是如何工作的 ................................................................................................. 37
使用切片查找匹配子串及所處環境 .......................................................................... 38
基礎背景 ............................................................................................................. 38
代碼 ..................................................................................................................... 40
它是如何工作的 ................................................................................................. 41
目錄 XIX
列表解析和切片 ......................................................................................................... 41
基礎背景 ............................................................................................................. 42
代碼 ..................................................................................................................... 42
它是如何工作的 ................................................................................................. 43
使用切片賦值來修復損壞的列表 .............................................................................. 43
基礎背景 ............................................................................................................. 43
代碼 ..................................................................................................................... 44
它是如何工作的 ................................................................................................. 45
使用清單連接分析心臟健康資料 .............................................................................. 46
基礎背景 ............................................................................................................. 46
代碼 ..................................................................................................................... 48
它是如何工作的 ................................................................................................. 48
使用生成器運算式查出未達最低工資標準的公司 .................................................. 48
基礎背景 ............................................................................................................. 49
代碼 ..................................................................................................................... 49
它是如何工作的 ................................................................................................. 50
使用 zip()函數格式化資料庫 ..................................................................................... 51
基礎背景 ............................................................................................................. 51
代碼 ..................................................................................................................... 52
它是如何工作的 ................................................................................................. 53
總結 ............................................................................................................................. 54
3 資料科學 .......................................................................................................... 55
.....................................................................................................
4 機器學習 ........................................................................................................ 102
....................................................................................
5 規則運算式 .................................................................................................... 155
................................................................................
6 算法 ...........................................................................
...............................................................................................
後記 .................................................................................................................... 221
主題書展
更多書展本週66折
您曾經瀏覽過的商品
購物須知
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。