1. 不要糾結於開發工具的選擇,簡單直接就是最好的
學習一種編程語言,首先要找一款合用的集成開發工具,似乎是自然而然的想法。為什么不呢?IDE可以自動補齊,可以一鍵運行,還可以斷點調試。使用IDE開發項目,就像駕駛一輛內飾豪華的汽車,盡情享受駕駛的樂趣就好了,誰還去關心引擎蓋里面發動機是如何工作的呢?我的年輕同事們也都是IDE的擁躉,最初使用pycharm,后來是時下大熱的vscode。
可是,我始終認為,編程就像是駕駛,程序員就是司機,而且是職業司機,不是把駕駛當成通勤技能的各色白領金領。既然是職業司機,就不能滿足於打着領結、戴着白手套駕駛內飾豪華、配置高端的汽車,而是必須具備打開引擎蓋子維修和保養的能力。
基於這個觀點,我不建議初學者一開始就使用集成開發工具。對於python這樣一種解釋型的腳本語言,一款趁手的編輯器就足夠了。linux平台上,vim或者emacs都足夠好(如果你通曉二者或者其中之一的話,請接受我的敬意);windows平台上,我推薦使用notepad++。python初學者使用編輯器而非IDE的好處是:
專注於python本身,而不是被工具使用問題所困擾。君不見,知乎上關於pycharm和vscode的使用說明、常見問題的解決方案,多得幾乎超過了討論python本身
手工運行代碼,可以更直觀、更深刻地了解腳本的解釋執行過程
手工調試代碼,有助於代碼優化,提高代碼把控能力
可以更好地使用pip安裝和管理第三方模塊
2. 習慣使用IDLE,這是學習python最好的方式
解釋型語言的優勢,就是可以寫一句執行一句,想到哪兒寫到哪兒,不必像編譯型語言那樣得把程序全部寫完,編譯成功后才能運行。我特別喜歡使用python的IDLE,甚至拿它當計算器用。很多時候,我用IDLE驗證代碼的寫法是否正確,查看模塊是否安裝成功以及版本號。IDLE支持tab鍵自動補齊,我經常用這個功能查看某個對象的方法和屬性。
>>> import numpy as np >>> np.__version__ '1.17.0' >>> np.hypot(3,4) 5.0 >>> def factorial(n): # 計算n的階乘 if n == 0: # 遞歸出口 return 1 return n*factorial(n-1) # 向遞歸出口方向靠近的自身調用 >>> factorial(5) 120 >>> _*2-100 140
小技巧
- tab鍵自動補齊
- 光標移動到執行過的語句上敲擊回車,可以重復這個命令
- 下划線(_)可以獲取最后一次執行結果
3. 關於python,你不是懂得太少,而是知道得太多了
很多 python 初學者熱衷於觀看各種網絡教程、視頻教程,甚至還做了很多筆記。經過了長時間的學習之后,發現自己還是無法駕馭python。在我看來,出現這個問題的原因,不是因為他們懂得太少,而是知道得太多了——准確說,是在初級階段學習了高級階段的課程。
學習是一個循序漸進的過程,而編程又一門實踐性很強的藝術,因此學習編程需要不斷地重復“學習-實踐”。不要認為跟着教程敲幾行代碼就叫實踐,那還是學習的過程。真正的實踐,就是寫一個讓自己滿意的代碼,實現一個獨立的功能。比如,初學者可以實現從一個文本文件讀出內容,做些特別處理,再寫入另一個文件,或者寫一些算法函數等。有一定基礎之后,可以寫一個socketserver,或者寫個小游戲。下圖是我學習wxpython時給自己確定的實踐目標。類似的,初學者應該可以想到更多。
4. pip已經近乎完美,但你未必完全了解
在python語言的發展過程中,安裝和管理第三方模塊的方法也歷經變化。現在,我們終於等來了pip這個近乎完美的工具。pip除了安裝(install)和刪除(uninstall)這兩大功能,還可以指定模塊的安裝版本(無需預先刪除當前已安裝版本),可以顯示所有已安裝的模塊,還可以通過upgrade自主升級。
# 安裝numpy模塊 PS D:\XufiveGit\wxgl> pip install numpy # 如果同時安裝了py2和py3環境的話,需要這樣使用pip PS D:\XufiveGit\wxgl> py -3 -m pip install numpy # 刪除numpy模塊 PS D:\XufiveGit\wxgl> py -3 -m pip uninstall numpy # 安裝numpy模塊,指定版本1.15.0 PS D:\XufiveGit\wxgl> py -3 -m pip install numpy=1.15.0 # 自主升級 PS D:\XufiveGit\wxgl> py -3 -m pip install --upgrade pip # 顯示已安裝的模塊 PS D:\XufiveGit\wxgl> py -3 -m pip list Package Version ----------------- ----------- -pencv-python 4.1.1 argh 0.26.2 attrs 19.1.0 Automat 0.7.0 basemap 1.2.0 beautifulsoup4 4.6.3 bleach 3.1.0 cefpython3 66.0 ... ...