如何學python?
很多人問過我「怎麼開始學python?」,「python是什麼」,「python已經學了基礎,如果高階」。所以我打算整理一下我認為不錯的學習資料,以後如果有人問我這些問題,就可以直接給他們推薦這個頁面了。
0.python2 還是python3
python 3。
python3版本(例如python 3.6.4)是不相容python2的(最常見的python2是pyhton2.7,這是乙個「長期支援版本」)這很不常見,因為一般的軟體都是相容老版本的。python之所以相容舊版本是因為python舊版本有很多設計不好的地方,python社群勇敢地重新設計了這些地方,使python使用起來更好。但是為之付出的代價就是python3**無法相容pyhton2.但是近幾年很多公司都在積極的向python3遷移,比如quora,instagram。
使用新版本的python可以體驗python很多不錯的特性。大多數python庫都是支援python3的。
github上有乙份不錯python3特性教程:arogozhnikov/python3_with_pleasure
1.零基礎
我從來沒有學過程式設計,該從**開始?
howdoi 這是乙個簡單的命令列工具,只有乙個檔案,需要簡單的一點入門知識就可以讀懂。
requests 這是乙個 http 請求倉庫,如果要寫爬蟲,幾乎每天都要用它。可以用它來寫乙個簡單的爬蟲試試。這個專案的**比起第乙個稍稍複雜,但是花點時間也能看懂。
pylons 有很多與 web 相關的專案,都比較小巧,適合學習源**。
agithub 是乙個很簡潔的 rest api 客戶端,之前的版本只有 300 行**,大量使用了getattr的特性,這個庫的源**值得一讀,你會體會到 python 「動態」 的特性。
tinydb 這是用 python 實現的乙個小型的文件型(nosql)資料庫,目前有 2000 行左右的**,注釋和文件也很豐富。核心思想就是用乙個 json 檔案來儲存資料,類似 sqlite。建議閱讀一下源**。
書籍資料
一些讀物,最好對python稍微了解之後再去讀,但是並不要求很高深的知識:
《python3 cookbook》這本書(其實所有叫 cookbook 的書都是如此)的形式是:提出乙個問題,提出一些問題的解決方案,討論這些方案並延伸。所以對深入 python 細節來說是不錯的。
《python的常見陷阱》 中文 en
《python guide》主要是介紹 python 生態,比如說如何組織你的專案,如何使用 logging,如何編寫測試,如何配置 ci/cd,用 python 寫 gui 程式有哪些庫可以使用等等,幾乎是必讀的資料。建議新手老手都看一遍,會有很大收穫。
《learning python》這本書一直在更新,都已經有第五版了,推薦英文好的同學去讀一讀。此書涉及了很多python的細節,非常囉嗦。也可以不讀,直接去翻閱文件。
python 3 module of the week 這個列表介紹了標準庫以及簡單用法,概括。適合快速閱讀,熟悉標準庫。
推薦讀一下 stack overflow 關於 python 問題。開啟python標籤,按照vote排序,會發現很多不錯的回答。(這個寶貴資源是risent告訴我的。)
這裡有乙份更詳細的 faq,值得一讀 。
啄木鳥社群有很多豐富的資源,上網衝浪!
python 的官方 itertools 文件好好看一下,裡面有很多執行緒的函式,如果有興趣也可以去看一下源**。如果你平時不怎麼用這個庫,那麼寫**的時候就會多造很多輪子,而且往往有缺陷。
去 follow 一些不錯的資源,比如:
本部落格右側推薦的其他 python 程式設計師的部落格
python weekly 每週週報
加入和你相關的郵件列表,看看大家都在討論什麼,推薦加入 python-dev 關注下 python 語言的發展動態
python 雙下劃線開頭和結束的方法叫做 「dunder method」,這是 python 鴨子型別的基礎。仔細讀一下這篇 a guide to python』s magic methods,遇到了更複雜的問題再去仔細讀文件。
這裡有一篇 transforming code into beautiful, idiomatic python 看一下漂亮、pythonic 的**是怎麼寫的吧。
工具我已經用python在寫乙個專案了,有什麼建議嗎?
5.faq
1.我在學習機器學習,有必要學習python嗎?
如果沒有興趣,可以不學。如果要用到numpy和scipy,可以通過它們的文件來學習。像numpy、scipy、flask、django這些框架,是有自己的一套設計的。你甚至可以理解為:這些python是不同的東西。學習numpy(web框架也是)而不學習python,我認為是可以的,遇到需要了解的python有關的問題可以再去學習也不遲。
2.有必要使用linux嗎?
沒有必要但是推薦使用linux的命令列。我所有的工作內容都是在終端下完成的,終端相比於ide更加高效,而且有很多awesome的工具。如果學會使用終端編輯器,你就不必為每種程式語言找到對應的 ide 才能寫的順手,你可以用一把錘子敲遍世界上所有的釘子,並且並不是所有的檔案編輯都有很好的 ide 的,比如 vagrantfile, dockerfile, nginx.conf, yml, csv 等等,使用終端編輯器的話編輯什麼都不會成為問題。還有,如果你想使用虛擬機器或 vps 來學習 nginx 之類的東西,那麼這是沒有 gui 的,終端編輯器可能是你唯一的選擇。但是你也可以用windows或ide,這些都不是強制的。但是一定要學會高效的解決自己遇到的問題,以及:了解你自己用的工具。比如pycharm的除錯技巧等。
3.為什麼python的for迴圈退出之後還能使用for迴圈定義的變數?
和其他語言不同,python的**塊是沒有作用域的,try-except**塊也沒有。詳見:《談談python for迴圈的作用域》
4.為什麼python的字串沒有.length之類的屬性或方法來獲取長度而使用len()函式?
python很多功能都是通過協議實現的。使用len(str)其實是呼叫了str.__len__方法。這樣可以在中間做一些其他的處理。例如__getitem__就支援了描述器等特性。詳見:
面試系統化學習和準備(二) docker篇
一 docker概念 本節要點 什麼是容器與映象?如何構建容器與映象 容器的生命週期 容器專案的架構 容器 vs.vm 1.容器 定義 乙個檢視隔離 資源可限制 獨立檔案系統的程序集合 1 檢視隔離 指的是容器之間的系統資源是是隔離的,乙個容器中你只能看見一部分程序,每個容器有獨立的主機名。2 資源...
Linux 系統化學習系列文章總目錄(持續更新中)
本頁內容都是本人系統化學習linux 時整理出來的。這些文章中,絕大多數命令類內容都是翻譯 整理man或info文件總結出來的,所以相對都比較完整。有些是博主早期的部落格,格式可能有些不美觀,請大家見諒 本人的寫作方式 風格也可能會讓朋友一看就噁心到直接右上角叉叉,對此本人只能say sorry。但...
遊戲的系統化思維
玩法 產出 培養 驗證成長 從乙個系統的角度去看,任何乙個系統的執行表現出來的特徵,都是這個系統的樣子 人如果生病,也會體現出來。遊戲就是要靠玩家去喂的,沒有玩家的精力和時間,遊戲就不是遊戲了。遊戲的節奏也很重要,就想電視劇集一樣,如果沒有主線的話,那麼電視劇集很快就會走向終點了,沒有內容的支撐肯定...