Python 最佳實踐指南 2018 學習筆記

基礎信息

版本

  • Python 2.7
  • Python 3.x

Python2.7 版本在 2020 年後再也不提供支持,建議新手使用 3.x 版本進行學習python

實現

  • CPython:Python的標準實現;
  • PyPy:用 RPython 實現,目標實在提升性能;
  • JPython:將 Python 編譯成 Java 字節碼,使其能在 JVM 中運行,目前支持 python2.7;
  • IronPython:是 .NET 平臺下的一種實現,支持 .NET 平臺下的語言調用 Python代碼;
  • PythonNet:是一個爲 Python 本地安裝和 .NET 公共語言運行庫(CLR)提供無縫整合的軟件包;

安裝 Python

  • Mac OS X
  • Windows
  • Linux

在 Windows 上安裝完成後檢查一下是否配置了 Python 和 Scripts 的環境變量,方便 cmd 快速啓動。git

虛擬環境

Pipenv

virtualenv

//安裝
pip3 install virtualenv

//查看版本號
virtualenv --version

//建立虛擬環境
virtualenv venv

//建立一個獨立的虛擬環境
virtualenv --no-site-packages venv

//激活虛擬環境
source venv/bin/activate

//退出虛擬環境
deactivate

//刪除虛擬環境
 rm virtualenv venv

//查看幫助
virtualenv -h

Python 開發環境

  • PyCharm
  • Visual Studio Code
  • Visual Studio 2017

上述命令在 Ubuntu 環境下測試可用,新手在 Windows 上開發仍是建議使用 PyCharmgithub

寫出優雅的 Python 代碼

代碼結構

倉庫結構

README.rst
LICENSE
setup.py
requirements.txt
sample/__init__.py
sample/core.py
sample/helpers.py
docs/conf.py
docs/index.rst
tests/test_basic.py
tests/test_advanced.py

具體模塊編程

位置 ./sample/ 或 ./sample.py
目的 具體代碼

受權bash

位置 ./LICENSE
目的 法律相關

Setup.pypython2.7

位置 ./setup.py
目的 包安裝和分發管理

依賴文件ide

位置 ./requirements.txt
目的 開發中的依賴

文檔函數

位置 ./docs/
目的 項目的參考文檔

測試套件性能

位置 ./test_sample.py 或 ./tests
目的 軟件包集成和單元測試

Makefile單元測試

位置 ./Makefile
目的 通用的管理任務。

模塊

  • 使用 import * 會使代碼更難閱讀,並使得依賴更少的分塊。

包系統

面向對象編程

將有上下文和反作用的函數與邏輯函數(稱爲純函數)隔離開來,能夠得到如下好處:

  • 純函數是肯定性的:給定一個固定的輸入,輸出始終是相同的。
  • 純函數須要重構或優化時,更容易更改或替換。
  • 純函數更易於使用單元測試進行測試:對於複雜的上下文設置和過後的數據清理的需求更少。
  • 純函數更容易操做、修飾和傳遞。

裝飾器

上下文管理器

動態類型

可變和不可變類型

除了 str.join() 和 +,您也可使用 % 格式運算符來鏈接肯定數量的字符串,但 PEP 3101 建議使用 str.format() 替代 % 操做符。

編碼風格

  • 明確代碼意義
  • 函數參數
    • 必選參數
    • 關鍵字參數
    • 任意參數列表 (*args)
    • 任意關鍵字參數字典(**kwargs)
  • 避免魔法方法

魔法方法: 改變對象建立和實例化的方式; 改變Python解釋器導入模塊的方式;甚至可能(若是須要的話也是被推薦的)在 Python 中嵌入 C 程序。

  • 任何不開放給客戶端代碼使用的方法或屬性,應該有一個下劃線前綴;
  • 建議在函數體中避免使用返回多個有意義的值;
  • 習語
    • 解包(Unpacking)

許多 Python 風格指南建議使用單下劃線的 _ 而不是這裏推薦的雙下劃線 __ 來標記廢棄變量。問題是, _ 經常使用在做爲 gettext() 函數的別名,也被用在交互式命令行中記錄最後一次操做的值。相反,使用雙下劃線 十分清晰和方便,並且可以消除使用其餘這些用例所帶來的意外干擾的風險。

  • 約定
    • 檢查變量是否等於常量;
    • 訪問字典元素;
    • 訪問字典元素:不要使用 dict.has_key() 方法。 相反,使用 x in d 語法,或者將默認參數傳遞給 dict.get() 方法。
    • 列表推導式,除此以外,map() 和 filter() 函數在列表的操做上也是很是簡潔的。
    • 讀文件;使用 with open 語法來讀文件,它可以爲你自動關閉文件。

Python 應用場景

部署優雅的 Python 代碼

附錄

相關參考

相關文章
相關標籤/搜索