1. 程式人生 > >【Python】一、Python基礎

【Python】一、Python基礎

0 序

先講一個故事。西漢初期,丞相蕭何死後,由曹參接任,曹丞相一天到晚都請人喝酒聊天,好像根本就不用心在治理國家似的。惠帝感到很納悶,又想不出個所以然來,只以為是曹相國嫌他太年輕了,看不起他,所以就不願意盡心盡力來輔佐他。終於有一天漢惠帝責問曹參,曹參反問“請陛下好好地想想,您跟先帝(劉邦)相比,誰更賢明英武呢?”惠帝立即說:“我怎麼敢和先帝相提並論呢?”曹參又問:“陛下看我的德才跟蕭何相國相比,誰強呢?”漢惠帝笑著說:“我看你好像是不如蕭相國。”,曹參接過惠帝的話說:“陛下說得非常正確。既然您的賢能不如先帝,我的德才又比不上蕭相國,那麼先帝與蕭相國在統一天下以後,陸續制定了許多明確而又完備的法令,在執行中又都是卓有成效的,難道我們還能制定出超過他們的法令規章來嗎?” 這就是著名的“蕭規曹隨

”的故事。

我講這個故事,是想表達網際網路上優質的Python部落格、視訊已經非常多,肯定比我這個毫無教學經驗的人講的好。所以我不會重複寫這些內容,但會給出連結,拋磚引玉,故這個系列不是正經的“Python教程”,想要學會Python還是多讀我推薦的一些資料吧。我更多的篇幅是介紹自己的經驗心得,和一般人不會重點講但實戰中又很實用的技巧。

作者:陳坤澤

郵箱:[email protected]

1 為什麼要學Python

廖雪峰Python教程有關於開發效率、執行效率、未來趨勢、找工作等方面完善的介紹:

完成同一個任務,C語言要寫1000行程式碼,Java只需要寫100行,而Python可能只要20行。所以Python是一種相當高階的語言。 程式碼少的代價是執行速度慢,但是大量的應用程式不需要這麼快的執行速度,因為使用者根本感覺不出來。例如開發一個下載MP3的網路應用程式,C程式的執行時間需要0.001秒,而Python程式的執行時間需要0.1秒,慢了100倍,但由於網路更慢,需要等待1秒,你想,使用者能感覺到1.001秒和1.1秒的區別嗎?

  1. 上手容易,萬能語言。
    • python有非常龐大的第三方功能擴充套件庫,包羅永珍,幾乎無所不能。可以做測試、運維、資料分析、資料探勘、機器學習和爬蟲等。
    • Python降低了進入IT行業的門檻,我身邊有很多數學專業的朋友,成功轉型做Python大資料分析的例子。數學專業不好找工作,迷茫的時候,學一個Python沒有什麼壞處,但卻大大擴寬了未來的發展出路。不僅是小眾的LaTeX,隨著人工智慧的發展,越來越多工作會被自動化技術取締,所以我要求編校組的每個人都要學習Python,否則等我們35歲的時候,試想我們跟剛畢業的大學生相比有什麼優勢呢?是什麼價值讓我們是不可替代的。
  2. 開發簡潔、快速。
    • Python創始人龜叔印在T恤前的理念就是“人生苦短,我用Python”。
    • 用Python能快速實現我們需要的一些小功能,做成自動化指令碼工具。
    • python專案的檔案也很簡潔,一個py檔案既是程式碼,也是可執行檔案。而C++,一個cpp檔案可能對應有h標頭檔案要管理,就c++的專案標頭檔案管理學問,都可以開上好幾節課來探討了。簡潔清晰的檔案系統,讓我們寫程式碼的時候會更專注於業務功能的開發,而不是總去思考計算機底層相關的問題。
  3. 可以為自己的學習工作開發好用的小程式。
    • 將我們開發的Python小程式放到環境變數,windows作業系統可以用“Win鍵 + r”來快速開啟程式。
    • 例如:"rename.py"的檔案批量重新命名工具、“檢視目錄下png圖片資訊.py”。
    • 也可以使用PyQt開發剪下板的監控工具,在複製時,自動對內容進行處理,貼上的時候直接就是處理好的結果內容。
    • 還可以對一些第三方程式進行擴充套件,例如Beyond Compare差異對比軟體,有時候需要對兩段文字比較差異,就要新建兩個檔案,將內容貼上進去後,再開啟比較,手動操作就會非常繁瑣。將其寫成bc.py工具,直接用Beyond Compare軟體開啟兩個新建空檔案,將文字複製進去,就能快速實現差異比較了。
    • 再例如對git的功能進行擴充套件,增加一些專案檢視,僅檢視單個檔案的修改歷史,快速調取一個檔案任意兩個時間點的內容進行差異對比。 Markdown

2 Python學習資料推薦

我只敢推薦我看過的資料,但優質的資源肯定不止這些,大家可以自己去發掘,不錯的資料可以分享出來讓更多人知道。

3 程式設計技巧

3.1 軟體安裝

  1. 本文提及部分檔案可在此處下載 。
  2. 下載Python3.6(建議裝windows64位版:python-3.6.4-amd64.exe)
    • 要勾選下方的“Add Python 3.6 to PATH”,把python加入環境變數。
    • 如果已經安裝了舊版,例如3.6.2,會有更新安裝的選項,不用解除安裝舊版。
  3. pip加速
    • 使用“pip install”安裝Package的時候,預設的國外映象速度特別慢,可以通過修改為國內映象加速。參考資料
    • 下載附件裡的“pip”資料夾,放到個人目錄裡,例如我的使用者名稱是kzche,則放到:‪C:\Users\kzche\pip\pip.ini。
  4. IDE推薦PyCharm,pycharm視訊教程
    • 我喜歡深色的配色方案: File/Settings/Appearance & Behavior/Appearance/Theme/Darcula
    • 修改建立python指令碼檔案時的模板:我的python模板參考資料 Markdown
    • 設定Python直譯器,以及可以管理Package:
    • 開啟一個專案後,可以關閉不需要的目錄的索引index,加快專案載入速度: File/Settings/Project: YourProjectName/Project Structure/Right click on folder and press “Excluded”
    • View / Tool Windows / Structure,可以開啟程式碼結構檢視工具。

3.2 程式碼風格規範

在PyCharm,可以用Ctrl + Shift + Alt + L,對程式碼格式化,剩下還有下圖這種下劃線提示的,滑鼠移過去,會提示你的程式碼有什麼瑕疵,一般是一些PEP8規範。 Markdown

關於PEP8,至少要了解命名規範:變數函式名lower_with_under,類名CapWords,常量CAPS_WITH_UNDER。

很多下劃線問題,都可以把滑鼠游標停留在上面,按Alt + Enter,不少問題IDE會幫忙自動修正,或者彈出多種參考修正方案的選單。

3.3 註釋等程式碼塊

作為規範的工程開發,一個python程式碼檔案的開頭不應該直接就寫import,而是要寫兩個東西:編碼與作者資訊,文件註釋。 Markdown

灰色部分,第1~5行:

  • 第1行:是讓linux系統知道這是一個python3檔案
  • 第2行:告知解析程式本檔案文字採用的編碼格式
  • 第3~5行:程式碼作者和聯絡郵箱,作者可以有多人,以及檔案的建立或更新時間。 有需要的話還可以增加"# @Version : v.0.0"記錄版本資訊。

這塊程式碼除了用PyCharm設定py檔案模板的方法,在新建.py檔案時自動生成。也可以用搜狗輸入法設定"自定義短語",用輸入法設定巨集的好處是不用侷限於IDE,在任何地方都能用。還可以用這個方法設定很多常用程式碼塊。

綠色部分,第7~18行:

Python有一種獨一無二的的註釋方式:使用文件字串(Docstring),文件字串是包、模組、類或函式裡的第一個語句,這些字串可以通過物件的__doc__成員被自動提取,並且被pydoc所用。

每個檔案的開頭,最好有一段其文件介紹。定義函式等時也是同理:

def strwidth(s):
    """string width
    中英字串實際寬度
    
    >>> strwidth('ab')
    2
    >>> strwidth('a⑪中⑩')
    7

    ⑩等字元的寬度還是跟字型有關的,不過在大部分地方好像都是域寬2,目前演算法問題不大
    """
    try:
        res = len(s.encode('gbk'))
    except UnicodeEncodeError:
        count = len(s)
        for x in s:
            if ord(x) > 127:
                count += 1
        res = count
    return res

3.4 文件測試

上述strwidth用到了“>>>”,它既是一份簡潔清晰易懂的示例文件,也是一份“單元測試”,這是Python特有的“文件測試”功能。(廖雪峰文件測試基礎)

在PyCharm可以非常方便地執行一個檔案中的所有文件測試: Markdown

其中第③步具體設定方法: Markdown

Tips:

  • 在文件測試中的程式碼,IDE也是能識別,進行智慧編輯、程式碼補全提示的。
  • 有時候不用顯式的配置doctest,PyCharm會智慧識別檔案執行文件測試,甚至游標停留在函式、類裡面,可以單獨測試一個物件的測試樣例。

3.5 程式碼的查詢與重新命名

Ctrl+滑鼠左鍵(點選物件),可以跳轉到物件的定義處; 在物件右鍵,也有"Refactor"可以對物件進行批量重新命名。 但有時候IDE的功能無法滿足我們的需求,又或Refactor有時候會無效。

關於查詢,我們可以藉助全文搜尋軟體:FileLocator

在專案重構中,時常需要大量的文字替換工作。可以自己寫一個指令碼工具,遍歷檔案進行批量替換,但直接替換存在很大的風險隱患,此時可以結合Beyond Compare等軟體進行替換效果預覽,具體操作方法後續會補充介紹文章。

3.6 小段程式碼測試與分享

  1. 在專案中需要測試一小段語法或程式碼功能時,可以直接在PyCharm左下角開啟一個Python控制檯: Markdown
  2. 需要將自己的程式碼展示給他人看時(向他人請教自己的程式碼問題時),避免冗長,換行,無縮排,無高亮等問題給他人閱讀程式碼時帶來的不便。 可以用:https://paste.ubuntu.com/ 。 不過這是公開網站,不要放涉及技術洩密的程式碼。 Markdown
  3. 還可以使用線上程式設計網站,進行程式碼測試,開發小程式、程式碼分享。 Markdown

4 筆記整理

  1. 問問題的時候,要整理MWE(作者Liam Huang):
    • MWE是Minimal Working Example 的縮寫,意思是「最⼩⼯作⽰例」。顧名思義,最⼩⼯作⽰例的特點有三: 簡短不包含與問題⽆關的程式碼⽚段; 工作能夠獨⽴運⾏於他⼈的計算機上,⽽不需要再新增額外的程式碼; 示例在他⼈計算機上的運⾏結果,能完整地再現你所遇到的問題。
    • 不僅是問問題,我們在整理筆記,知識點的時候,道理是相通的, 例如下列兩段程式碼,即簡介地演示了遇到的問題,在註釋裡寫出程式執行會得到的結果,也演示瞭解決方案的程式碼: Markdown
  2. 可以參考Python 標準庫官方文件 的目錄結構進行分類整理,例如下圖是我依據官方文件,對文書處理等方面的筆記結構,新增一些相關的第三方庫chardet、ahocorasick、Levenshtein。 Markdown
  3. 儘可能用表格、圖片、思維導圖的形式代替純文字描述。使用純文字時,也可以配合列表、縮排、顏色等格式豐富表達內容。
    • 例如使用正則庫re匹配的Match物件,所有的類成員變數有: m = re.search(r'(\d{6})-(\d{6})', '2018暑假高數高二選修2-1(教師版) 180526-091500.pdf') Markdown
  4. 參考文獻:所有不是自己寫的內容,借鑑參考了的資料,都要附上介紹或連結,這不僅是尊重別人的勞動成果,也方便日後遇到細節問題,查閱原文複核。
  5. 線上Jupyter,便於建立和共享文學化程式文件,支援實時程式碼,數學方程,視覺化和 markdown。對我們工程開發來說可能實用價值不大,不過這也是很流行的一個工具,可以瞭解下。例如在資料分析工作中,可以邊寫程式碼,邊寫解釋,邊作圖,專案完成後既是一份程式碼,也是一份文件筆記。