有java基礎,要做運維,想學python,求推薦python書籍?
知乎鏈接:https://www.zhihu.com/question/53814059
這是我在你是如何自學 Python 的?問題下的回答,可以參考一下。
另外,可以考慮一下樂岸教育的Python培訓,特色就是大公司一線工程師授課!樂岸科技 - 有態(tài)度的IT培訓機構,業(yè)界最好的MySQL培訓,Python培訓,大數(shù)據(jù)培訓
入門階段
1. A Byte of Python(用以快速入門)
2. Python CookBook(用以提高)
3.Python Module of the Week學習標準庫
實戰(zhàn)階段
有了上面三部分知識以后,相信Python已經入門了,然后,多做一些練習。比如:Intermediate Python Workshop/Projects
也可以做一些爬蟲,或者Web開發(fā)。建議學習Flask,因為Flask代碼量少,學完以后,你還可以看一下Flask的源碼,了解一下Web服務的整個運作原理。Flask源碼剖析。
提高階段
有了上面的基礎以后,你的Python已經不錯了,但是,還是不夠的。你至少還需要下面這兩本書:
這里的第一本書豆瓣評分9.0分,我想不用我再多說什么了。對于第二本書,我簡短書評:
我對本著書的評價是不適合新手的入門書。大家可能疑惑我的評價,什么叫做“不適合新手的入門書”,不是自相矛盾嗎,然而,并沒有,請聽我解釋。
之所以說,不適合新手,是因為這本書太厚了,中譯本紙質版將近九百頁,加上電子版的部分一千多頁,拿來當磚頭用完全不成問題。新手一上來就看這么厚的書,一定會打擊積極性,所以,不適合新手。
之所以說是入門書,是因為這本書講的內容很基礎,而且淺顯易懂,就講Python的語法,連標準庫都不涉及。大家想想看,一本講Python語法的書,能寫一千多頁,這是為什么,如果不是因為廢話多,那肯定因為全面、細致啊。全書廢話并不多,翻譯的也挺好(那些說翻譯的差的人想必是噴子吧),讀起來不費勁。學完以后,會明顯感覺到對Python的掌握更加(非常)深入、全面、系統(tǒng)。所以,這是一本入門書。這也是我力推,且打五分的原因。特別適合已經有一兩年工作經驗,覺得自己Python不錯的同學進行查漏補缺,進行深入學習。這本書是成為Python高手的必經之路。必讀!!!
不斷學習
好了,有了上面的知識儲備以后,你的Python已經算是高手水平了。不過,還不能懈怠,你還需要關注(訂閱):
其他
其實,光學習Python是不能成為高手的,所謂吾生也有涯而知也無涯。要想成為高手,我還有2本書想推薦,一本幫助你以后更高效的學習其他書籍,一本幫助你快速提高編程水平(這里說的水平是代碼可讀性和可維護性):
用Python爬網頁需要了解什么背景知識?
最近在學Python爬蟲,寫腳本進行模擬登錄時,對很多名詞一知半解,例如:
cookie, header, agent, proxy, timeout, HTTPError, URLError……
感覺這些詞多少都聽過,但也談不上真的知道。所以跟著教程寫東西時,稍微需要點變通就容易束手無策。
求問有什么書或者網絡資源,是可以比較系統(tǒng)性的介紹這塊內容的嗎?
知乎地址:https://www.zhihu.com/question/50015995
學習C語言基本思路與參考書籍
知乎地址:https://www.zhihu.com/collection/157776753?page=2
3 年前
計算機行業(yè)發(fā)展非常快,大學里的教育基本都跟不上實際的社會需求。如果你所在的學校還在指定大家使用譚浩強的教材,或使用VC6.0來教大家上機實驗,那你不妨看看本文,這里有一些建議可以幫助你不會脫離社會太遠。
考慮到這是一個過來人感覺很基礎,但是對于初學者又覺得困難重重的問題,我想如果這篇文章要想寫得不讓你覺得專業(yè)名詞扎堆,內容高深莫測,讀完還是不知所云,那最好的辦法也許是,我們通過溝通的方式把整個「C語言應該怎么學」的問題由小及大的展開,慢慢來談。
在開始之前,我們先來做一個小測試。
一、小測試,你準備好學習C語言了嗎?
你是否聽說過二進制數(shù),他們是如何進行運算的?(基本的數(shù)的進制知識)
你能說出一個最小的計算機系統(tǒng)由哪些部分構成嗎?(基本的計算機結構知識)
計算機是如何存儲圖像的? (數(shù)字化原理)
上面這三個問題,能回答的同學舉手。如果你舉手了,那么我們進入下階段的討論,否則,我將告訴你,你現(xiàn)在最重要的事情,是趕緊找一本《計算機科學導論》把預備知識補充好。
因為——
C語言說到底是一門以內存為中心的編程語言,你能不能學懂它,其實很大程度上不是取決于你智商高低,而是你是否擁有扎實的計算機結構、存儲、運算原理方面的知識!!
在這里,我想強調,任何新知識的學習都是有一定的前提條件的。C語言學習的前提條件就是,對計算機系統(tǒng)要有一個整體的,科學的基礎認識。 脫離了這個基礎認識,一切都很困難。
所以,有些同學學不會C語言,不是因為他們智商不行,而是因為他們沒有準備好。
我花時間寫這篇文章來給大家講C語言的學習,當然是希望大家真正的學會、學懂C語言,并能夠真正感覺到它的用處,所以很抱歉我不會像培訓機構那樣,告訴你“零基礎”就能夠開始學。但如果你真的按照我說的去做,那么至少從現(xiàn)在起,你確實是開始有點“學院派”的認真了。
在這篇文章的最后,我推薦了一本我曾經讀過的《計算機科學導論》。這本書可以說是我的啟蒙書,我讀過,真心覺得好,所以推薦給需要的同學。
好了,接下來我們進入C語言的學習過程。
二、學C語言到底學些什么—— 「語法」和「函數(shù)庫」
C語言學習的關鍵,是要先搞明白,學C語言到底是在學些什么?
我這么一問,有的同學就要翻開課本,指著目錄說,我知道我知道,有變量,數(shù)據(jù)類型,循環(huán)語句,函數(shù),哦哦哦,還有指針等等!
很遺憾,如果你以為學習C語言就是學習這些東西,那你得趕緊糾正一下看法,否則接下來的學習會困難重重。因為我曾經就是這么掉到坑里的,這種狹隘的觀點讓我浪費了大量的時間去學習瑣碎的細節(jié),又讓我遲遲不能接觸到更重要的知識,結果是眼高手低——知道許多別人不知道的無用知識,但是又寫不出什么真正像樣的程序來。
所謂「語法」,就是入門教材里最著重講解的內容。也就是那些所謂的變量、數(shù)據(jù)類型、分支判斷、循環(huán)、函數(shù)、指針等等。
這些內容比較枯燥,但是好消息是這些內容并不難,都是一些格式化的東西。只要你多練習,就會自動的刻在你的腦子里,成為一種下意識的習慣。
但是 「語法」本身其實沒什么用。因為它只是一種格式規(guī)范,你學得再好,也不能引導你寫出厲害的程序。因為在軟件設計中,實際上最核心的部分還是在于其 「函數(shù)庫」部分。
什么是 「函數(shù)庫」?
簡單來說,函數(shù)庫就是別人編寫好的C函數(shù),直接提供給你用,你只要調用里面的函數(shù),就能實現(xiàn)一定的功能。例如 printf() 函數(shù),你肯定知道,只要調用這個函數(shù),你就能夠在那個黑糊糊的窗口里顯示一段文字。你并不明白 printf() 的內部工作原理,但是你知道你只要按照說明去調用,就能夠實現(xiàn)對應的功能。
這就是函數(shù)庫——別人寫好的,打包送到你面前,你可以自由調用來做各種各樣的事情的函數(shù)集合。
我來說幾個來自函數(shù)庫的函數(shù),例如 CreateWindowEx() 函數(shù)可以用來創(chuàng)建一個窗體(這個函數(shù)由微軟提供),例如 GaussianBlur() 函數(shù)可以用來對一個圖像進行高斯模糊處理(這個函數(shù)由 OpenCV 提供),再比如 evhttp_new() 函數(shù)可以創(chuàng)建一個 HTTP 服務程序(這個函數(shù)由 libevent 提供)……
其他還有什么庫函數(shù)?太多了。從控制網絡通信,到截取視頻畫面并分析其中的人臉位置,到加解密本地文件,甚至包括微信收發(fā)消息,抓取淘寶商品信息……庫函數(shù)的數(shù)量和有用程度遠遠超乎大家的想象。
誒?你從來沒聽說過還有這些東西?課本里也沒提到?
那是因為你看的是入門教材,著重講解語法,順帶提到了少量的 C 語言自帶的庫函數(shù)而已。事實上 C 語言包含的庫函數(shù)本身就有不少,但是更多更強大的還是許多第三方庫函數(shù),例如我上面提到的這些。
重點是在于,我想告訴你,庫函數(shù)才是你學習C語言并將其應用于實際的關鍵!!
學會調用別人的庫函數(shù),甚至寫出自己的庫函數(shù),都是極其重要的。因為一個函數(shù),本質上就是一個功能單位。你擁有的基礎設施越多,你的發(fā)揮空間越大。道理就是這么簡單。這就是我需要向大家強調的第二個觀點,要想寫出實用的C程序,一大關鍵就是研究并學會使用各種庫函數(shù)。
你看見隔壁王二寫了個三維程序能讓一個彩色的立方體在空中旋轉?快找 OpenGL 庫函數(shù)來用。什么?劉大寶寫了個網絡軟件能在局域網里聊天?快找 Socket 庫來用。
看見了嗎?庫函數(shù)有多重要?
但是,函數(shù)庫的學習并不是孤立的。許多庫函數(shù)背后需要一定的領域知識支撐。同樣如我第一個觀點所述,需要預備知識。學懂一個函數(shù)庫,代表的不僅僅是明白如何調用那么簡單, 而更反映了我們對一個特定領域——網絡、數(shù)字圖像、密碼學、操作系統(tǒng)等的認識。
三、基本的學習過程與一般規(guī)律
如我前面所述,C語言學習主要是以語法入門,然后到函數(shù)庫。再具體一些來說,包括以下階段:
學習基礎語法
學習簡單的少數(shù)幾個C語言自帶的函數(shù)
學習一些程序設計的基礎知識(數(shù)據(jù)結構,算法)
學習更多更強大的C語言自帶的函數(shù)
學習一些特定應用領域的基本理論知識(操作系統(tǒng),數(shù)據(jù)庫,網絡,圖像……)
應用上一階段學習的到知識進一步學習其他人提供的函數(shù)庫(網絡處理、操作系統(tǒng)管理、圖像、密碼學等等)
對于本科階段的同學來說,著重學好1-4,有選擇的學習一下5-6,做一些小作品出來,就已經非常非常不錯了。這就是一般的學習規(guī)律。說得很簡短,但是要做到真的很不容易。
四、參考書籍
首先第一本,也是我認為最重要的書,是這本《計算機科學導論》。亞馬遜地址:《計算機科學導論(原書第2版)》 佛羅贊 (Behrouz A.Forouzan), 莫沙拉夫 (Firouz Mosharraf), 劉藝【摘要 書評 試讀】圖書
可以說,這本書是對我人生影響最大的兩本書之一。這本書通俗易懂,知識面廣,但又具有一定的深度。真是因為讀了這本書,才讓我建立了對計算機科學合理的基本認識。在不涉及太多的數(shù)學原理的情況下,這本書清晰的揭示了包括計算機的基本構成,CPU運算的原理,內存、硬盤、光盤是如何存儲數(shù)據(jù)的,編程的基本原理(機器語言、匯編語言,結構化編程語言,面向對象編程語言),以及網絡、數(shù)據(jù)壓縮等。
說白了,就是一本科普書。但是是一本偉大的科普書。入門者的福音書。
然后,第二本,就是關于C語言語法的書籍了,說實話這部份我已經沒有印象看的什么書了。因為我這個人有個毛病,就是喜歡東翻翻,西翻翻,哪里不懂就到處找書。可見這個部分其實沒有大家想象的那么固定,你只要找到一本自己看得懂的書,就是好書!不必太過于拘泥于書與書之間的優(yōu)劣比較。
最經典的C語言入門書籍許多人肯定要說是 K&R 的那本。但是其實這本書對大多數(shù)初學者來說還是略難,如果有興趣也可以讀一讀。但我更建議你了解一些C語言之后再轉過來看看會更好。
柴田望洋的《明解C語言》最近是一本廣受歡迎的親切的C語言入門書。《明解C語言》 柴田望洋, 管杰, 羅勇【摘要 書評 試讀】圖書
昨天我專門到書店翻了一下,這本書確實很不錯,親切,謙虛,易懂。但我想也未必適合所有人。如果你是希望學習曲線平緩一些的,可以考慮看看。
啊,差點忘了,還有一本咱們國內的趙巖先生寫的《C語言點滴》也有不錯的反響,也許大家也可以找來看看。《C語言點滴》 趙巖【摘要 書評 試讀】圖書
基本上,上面這些書就能幫助你比較輕松的入門了。其他書籍推薦,我會陸續(xù)也寫出來。今天實在寫不了這么多了。
但是,再補充一本,如果對于那些已經學得差不多的同學,必須得看看下面這本,這是我的至愛之一啊!^_^ 那就是吊炸天的《C Standard Library》,china-pub鏈接:C標準庫(C標準庫“圣經”)[按需印刷]
好好看看這本書,它是真正的頂級教材,因為——里面包含了標準庫實現(xiàn)的完整源碼,以及作者在實現(xiàn)時的思路講解。是一本值得收藏的超級力作。讓我們一睹頂級程序員的思維杰作。(吐嘈:這本書的翻譯還是有一些值得修正的地方,所以能收英文版的同學就直接收英文版了)
這幾本書其實并未涵蓋C語言學習的所有重要方面。稍后我會再放上一些來。今天打字打到手疼,就不繼續(xù)了。
五、晉級——通向更高境界之路
學無止境。更專業(yè)的學習至此其實才剛剛開始。
(待續(xù))
作者:路人甲
鏈接:https://www.zhihu.com/question/55493026/answer/163537026
來源:知乎
著作權歸作者所有,轉載請聯(lián)系作者獲得授權。
無意中聽我們院長大人說:Python是一門神奇的語言,在此之前我已經對C/C++/Java等幾門語言有了一定得了解和掌握,并做過一些小項目。
學習Python大致可以分為以下幾個階段:
1.
剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數(shù)據(jù)結構、語法等,基礎過的很快,基本上1~2周時間就能過完了,我當時是在這兒看的基礎:Python 簡介 | 菜鳥教程
2.
看完基礎后,就是做一些小項目鞏固基礎,比方說:做一個終端計算器,如果實在找不到什么練手項目,可以在Codecademy - learn to code, interactively, for free上面進行練習。
3.
如果時間充裕的話可以買一本講Python基礎的書籍比如《Python編程》,閱讀這些書籍,在鞏固一遍基礎的同時你會發(fā)現(xiàn)自己諸多沒有學習到的邊邊角角,這一步是對自己基礎知識的補充。
4.
Python庫是Python的精華所在,可以說Python庫組成并且造就了Python,Python庫是Python開發(fā)者的利器,所以學習Python庫就顯得尤為重要:The Python Standard Library,Python庫很多,如果你沒有時間全部看完,不妨學習一遍常用的Python庫:Python常用庫整理 - 知乎專欄
5.
Python庫是開發(fā)者利器,用這些庫你可以做很多很多東西,最常見的網絡爬蟲、自然語言處理、圖像識別等等,這些領域都有很強大的Python庫做支持,所以當你學了Python庫之后,一定要第一時間進行練習。如何尋找自己需要的Python庫呢?推薦我之前的一個回答:如何找到適合需求的 Python 庫?
6.
學習使用了這些Python庫,此時的你應該是對Python十分滿意,也十分激動能遇到這樣的語言,就是這個時候不妨開始學習Python數(shù)據(jù)結構與算法,Python設計模式,這是你進一步學習的一個重要步驟:faif/python-patterns
7.
當度過艱難的第六步,此時選擇你要研究的方向,如果你想做后端開發(fā),不妨研究研究Django,再往后,就是你自己自由發(fā)揮了。
---
畫外音:收藏的大兄弟不妨點個贊呀!
用數(shù)據(jù)講故事:路人甲 - 知乎
編程專欄:學習編程 - 知乎專欄
作者:成增存
鏈接:https://www.zhihu.com/question/20702054/answer/15921242
來源:知乎
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。
階段一:前輩領進門。
第一眼是一個前輩給我看了看Python的代碼,因為自己最早學習的是Java語言,第一眼看到Python的時候,前輩說,“Python是面向對象的”,然后就 打印了幾句代碼。可我怎么也看不出到底哪里是“面向對象”的。前輩說“在Python里,一切皆對象”,我才有點領悟的說道:“原來把什么看成對象,就是面向對象”,哈哈。
階段二:開始看的是《Dive into Python》、《Leaning python》、《Python Doc》。
因為有很多語言學習經歷,很快就完成了初步語法和使用學習。太復雜的特性還是在使用中逐步掌握的。
階段三:開始使用Python做自己的一些日常工作。
比如Python搜索文件,Python批量處理等,使用最多的還是re模塊和socket相關模塊。寫了大量的例子,讓自己對Python更加喜愛,也更加熟悉。此時翻閱最多的是《Python Doc》的指南。不管是語言參考、庫參考、Demo參考,都有大量可使用的內容,內容質量很高堪比JDK。
階段四:生產上馬。
開始使用Django,F(xiàn)lask,Tornado開發(fā)一些web應用,寫一些日常使用的工具包等。逐步提升設計能力,和整體代碼的管理能力。
階段五:更合理的分配好C,Java,Python三門語言各自擅長的部分。
把合適的語言用到合適的地方。盡管一門語言有時候可以搞定所有的,但用擅長的語言解決合適的問題才是效率最高的。這也是“Python的大道至簡”的理念帶給我的幫助和認識。
PS:其中過程中主要的一些方法:
1、看書。學習的基礎。
2、自己本地練習。編程還是要實踐出真知。
3、資料查詢。google,stackoverflow等多關注。
4、交流。各種論壇上的python group,論壇。最早去的CU,JavaEye,不過現(xiàn)在貌似去的少了。google group 必須訂閱。
學習+實踐+總結,掌握語言的法寶。
236
作者:成增存
鏈接:https://www.zhihu.com/question/20702054/answer/15921242
來源:知乎
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。
階段一:前輩領進門。
第一眼是一個前輩給我看了看Python的代碼,因為自己最早學習的是Java語言,第一眼看到Python的時候,前輩說,“Python是面向對象的”,然后就 打印了幾句代碼。可我怎么也看不出到底哪里是“面向對象”的。前輩說“在Python里,一切皆對象”,我才有點領悟的說道:“原來把什么看成對象,就是面向對象”,哈哈。
階段二:開始看的是《Dive into Python》、《Leaning python》、《Python Doc》。
因為有很多語言學習經歷,很快就完成了初步語法和使用學習。太復雜的特性還是在使用中逐步掌握的。
階段三:開始使用Python做自己的一些日常工作。
比如Python搜索文件,Python批量處理等,使用最多的還是re模塊和socket相關模塊。寫了大量的例子,讓自己對Python更加喜愛,也更加熟悉。此時翻閱最多的是《Python Doc》的指南。不管是語言參考、庫參考、Demo參考,都有大量可使用的內容,內容質量很高堪比JDK。
階段四:生產上馬。
開始使用Django,F(xiàn)lask,Tornado開發(fā)一些web應用,寫一些日常使用的工具包等。逐步提升設計能力,和整體代碼的管理能力。
階段五:更合理的分配好C,Java,Python三門語言各自擅長的部分。
把合適的語言用到合適的地方。盡管一門語言有時候可以搞定所有的,但用擅長的語言解決合適的問題才是效率最高的。這也是“Python的大道至簡”的理念帶給我的幫助和認識。
PS:其中過程中主要的一些方法:
1、看書。學習的基礎。
2、自己本地練習。編程還是要實踐出真知。
3、資料查詢。google,stackoverflow等多關注。
4、交流。各種論壇上的python group,論壇。最早去的CU,JavaEye,不過現(xiàn)在貌似去的少了。google group 必須訂閱。
學習+實踐+總結,掌握語言的法寶。
236作者:李世元
鏈接:https://www.zhihu.com/question/25036999/answer/29942298
來源:知乎
著作權歸作者所有,轉載請聯(lián)系作者獲得授權。
我覺得噴功利心強,應該馬上動手的過于主觀了。
問題出在這里:對于有整套軟件工程知識體系的人來說,從學習Python到做個小工具是5分鐘的事情,所以我們習慣認為應該立即動手。但是對于一個文科生,題主所說的其實不只是學習Python,而是學習Python+基礎軟件開發(fā)知識。
具體我等題主回答我評論里的問題再答
------------------------------------------------------------------------------------------------
先回答題主問題,就是到各個程度需要的時間,以下時間標準是每天兩個小時的時間計算。具體時間是我假設自己零基礎的情況下估計出來的。同時也是我建議的一個學習順序。
1? 配置開發(fā)環(huán)境+從總體上了解語言特性(通過書籍或網上的資料,這時會有很多不懂得,先無視掉)+第一個HelloWord能正常運行。這部分一天時間(兩個小時)
2? 然后逐個研究基礎語法,嘗試運行書里的例子。這里的比如函數(shù),比如循環(huán),比如基礎數(shù)據(jù)類型,比如字符串處理,數(shù)組分片。這部分要一周。(其實對新手可能不夠,但是這部分不對應實際任務可能知其然不知其所以然,所以可以先淺薄點的學習,以后實際遇到再加強)
3? 嘗試一些API,就是題主所說的定時提示聲音的小工具的例子,這里由于沒有系統(tǒng)的學習過,題主會需要通過Google來獲取知識。多找一些網上的例子學習一下。與此同時,會需要了解一些技術的網站或圈子,以便于獲取知識。這個過程中也會熟練基礎語法。這部分要1-3個月
4? 閱讀一些類似《計算機組成原理》,《Python核心編程》之類的稍進階的書籍,來保證自己學習的系統(tǒng)性。對數(shù)據(jù)結構和算法有一點基礎的了解。當有一個想法時,能想清楚實現(xiàn)的邏輯和需要查閱那些資料。這時你已經對編程有所了解了。這個階段你應該能實現(xiàn)你所說的簡單的游戲的邏輯(不包括繪制界面),比如24點,掃雷,貪食蛇,俄羅斯方塊之類的。這時你已經具有學習圖形界面編程(GUI)的能力了。這部分需要3個月。
5 學習GUI編程,能繪制簡單界面。同時去熟練3,4的內容。這時你應該能獨立完成4中的那些小游戲了。3個月。
至此,如果夠勤奮的話,不到一年,你的目的已經達到了,以后你可以多看看一些小demo和開源的小游戲,逐步提高自己,甚至能實現(xiàn)自己設計的一些游戲的idea。也可以去了解其他語言和平臺(只要學會了編程的思想,再學其他語言很容易),做個Android上的小游戲什么的。
至于你說的這個:
很大的:覺得某些軟件(例如Adobe家族)甚至操作系統(tǒng)本身有用著不爽的地方,自己修改之。
很大的:真的到社會上的企業(yè)里上班,做網站后臺、網站架構、數(shù)據(jù)庫、大數(shù)據(jù)運算,等等等等,上不封頂。
這個非科班出身,想利用業(yè)余時間來做到這個程度,基本不可能的。需要大量的知識體系和經驗,以及長期訓練出來的邏輯思維能力,工程能力,debug能力。想做,就要用大量時間學習+在工作中實踐。
我聽一個人說過,他也是毫無基礎,比較松散地學Java三年,現(xiàn)在靠Java吃飯。
人家全日制的學習好吧!人家在工作中得到練習好吧!
楊學光個人博客:http://zmrenwu.com/
先放個牛逼的學習資料:Python 3 Module of the Week,中文名《每周一個 Python 3 模塊》。作者幾乎實踐了一遍全部標準庫,并為每一個 API 補充了一段代碼示例,可以和官方文檔相互補充來看。
學習 python 文檔的原則就是:熟悉常用庫的大部分常用API。
我最近花了一個多月時間讀了幾遍這些庫的文檔,從此之后感覺寫 python 代碼輕松多了。
string:包含各種簡單的字符串處理方法,對于簡單的字符串處理操作使用這里面的方法即可,不要動不動就寫個正則表達式。
re:字符處理終極模塊。好好掌握正則表達式語法,掌握里面的幾個匹配方法,掌握 Match Object 的用法,捕獲組的用法等。需要指出的是如果能用 string 模塊處理的就盡量不用正則表達式,殺雞不用牛刀。
datetime,calender:我對于涉及時間處理的情況倒不多,一般就是獲取一下當前時間,根據(jù)時間的字符串構造 datetime 對象,格式化時間輸出等,因此掌握其常用的幾個對象和方法即可。
math,random,statistics:非專門的數(shù)學程序偶爾也會涉及一點數(shù)學運算,這幾個模塊提供了最基本的數(shù)學運算方法。了解里面提供了哪些開箱即用的方法不至于讓我們在遇到基本的數(shù)學運算時束手無策或者重新發(fā)明輪子。當然專門的數(shù)學計算我會使用 numpy,pandas 等。然而掌握標準庫的基本模塊同樣很重要,你不會想為了一個簡單的需求而不得不去安裝一個 numpy。
itertools,operator:itertools 是一個十分重要的模塊。直到我某天遇到它才發(fā)現(xiàn)我以前一直在傻逼地重復造輪子,比如求排列組合等。雖然 tertools 里面的方法自己寫也用不了幾行代碼,但別人既然已經寫好了干嘛不用?operator 只求掌握兩個方法 itemgetter 和 attrgetter,這給排序帶來極大便利。雖然也可以用 lambda 表達式代替,但是用這兩個方法更加 pythonic ,且對于大量元素排序其性能會略有提升。而該模塊的其他方法大部分似乎都是我們常用內置操作符的函數(shù)版本,了解即可。
pathlib,glob,fnmatch:簡單的目錄處理使用 glob 和 fnmatch 即可,這兩個模塊十分簡單,只有幾個 API 即完成大部分目錄處理和文件名匹配功能。而 pathlib 則提供了一整套面向對象常用和不常用的目錄處理 API,異常強大方便。值得一提的是如果你不是因某些原因非得使用 py2 的話,我強烈建議直接使用 py 的最新發(fā)布版本(目前是 py3.5),py3 的很多高級特性和新引入的標準庫障相比 py2 會省事很多,例如 pathlib 就是 py3.4 才引入。目錄處理 py2 參閱 os.path
sqlite3:為了防止殺雞用牛刀的情況準備。有時候我們會遇到一點簡單的數(shù)據(jù)庫需求,你肯定不想為了僅僅存那么一點數(shù)據(jù)而花費大量時間去配置一個 mysql 或者其他大型的數(shù)據(jù)庫服務。sqlite 內置于 python,開箱即用,異常方便。另外你不用過于擔心性能問題,我相信一般的需求都沒有到考慮 sqlite 性能的地步。我曾用 sqlite3 處理過 40GB 的數(shù)據(jù),和 mysql 不相上下。
threading,multiprocessing,concurrent.futures:有時候涉及到大量 io 處理或者運算處理,程序顯得有點慢,用這幾個模塊改造一下程序,使其多線程或者多進程運行會顯著提高程序運行效率。
json:處理 json 編碼解碼也是常用需求,這個模塊非常簡單,10分鐘可以看完其 API。
utllib.request,urllib.response,urllib.parser,urllib.error,http.cookies,http.cookiesjar:寫小爬蟲腳本使用到的庫。雖然面對 requests 庫這幾個庫都該 deprecated,但是了解這幾個庫的使用方法有助于我們更好地理解 requests 庫是如何工作的以及讓我們體會到為什么人們感激 requests 庫的作者。另外 html 解析方面 beautifulsoup 推薦一看。我的需求就是寫點簡單小爬蟲腳本從互聯(lián)網爬一些數(shù)據(jù)。專業(yè)的爬蟲可求助常用的爬蟲框架。
此外我是做數(shù)據(jù)科學的,列舉幾個科學計算的標準庫:numpy,scipy,pandas,matplotlib,各大機器學習庫(但我不搞機器學習,所以也不是很清楚。)
這么多模塊不可能完全記住其全部 API,我們要做到的就是當遇到某個需求時馬上回想起某個模塊的某個函數(shù)可以解決該問題,然后迅速訂閱到文檔查閱其使用方法。另外多看別人寫的優(yōu)秀代碼有助于提高個人寫代碼的姿勢,不鼓勵重復造輪子但鼓勵重復拆輪子,研究輪子然后造全新的輪子。
手機碼字,暫時說這么多。本人也是一個被 python 的優(yōu)雅吸引的小菜鳥,望能和 pythoner 們不斷交流學習。
補充一點:看到一些回答不鼓勵系統(tǒng)地學習文檔,但從我個人學習編程體會來看,并不十分同意。學習過但不記得了和從沒學習過絕對是兩回事。我初學 python 的時候也是踐行著邊用邊查的原則,遇到一個需求就百度或者 google,這往往都能搜索出解決方案。但是這些搜到的資料有一些缺點,比如已經過時,或者限于作者本人的知識,給出的有時候不一定是最佳解決方案,或者你用他的代碼解決了問題,但是由于不明白其原理,遇到坑不知道如何解決,最終還得回去讀官方文檔。官方文檔好處是權威,而且文檔中會包含著這個作者對這個模塊設計的理念,這些對從網上搜索的資料來說是沒有的。此外,除非是那種超大型的庫,一般通讀一遍其官方文檔一般也就幾個小時,讀一遍是絕對值得的。我現(xiàn)在根據(jù)經驗總結出來的我認為最好的做法是:在使用任何一個模塊之前,先通讀一遍其官方文檔,了解其為我們提供了哪些 API,之后在實際編程的過程中遇到了相關需求,就針對這個需求再去查閱文檔,如果文檔說的不夠詳細,再 google 網上的一些代碼示例。