隨手養成 Python 好習慣 - PEP8 Coding Style、Vim 基本設定
Posted on Sep 3, 2016 in Python 程式設計 - 初階 by Amo Chen ‐ 3 min read
最近有朋友也開始寫起 Python,不過特別的是,他們是在不同的作業系統進行開發,有些人用 Windows,有些人用 Linux,這通常第一個地雷就是 “Tab 的間距在 Windows 與 Linux 是不一致的” ,這將可能導致 Python 執行時會產生 IndentationError: unindent does not match any outer indentation level
的錯誤訊息。也因此讓編者想寫下這篇文章,介紹 Python 的 Coding Style 與記錄編者常用的 Python 設定。
PEP8 Coding Style
因為 Python 是利用縮排來表示區塊的語言,所以已經確保 Coding Style 基本的一致性,但誠如前述所言,Windows 與 Linux 不一致的 Tab 間距則可能會破壞這樣的一致性,而為了進一步確保一致性,Python 在 PEP8 - Style Guide for Python Code 就闡明了詳細的 Coding Style 讓大家有通用的原則可以遵循,推薦大家印出來常常參閱 :) 。
以下就列出幾個常見的原則:
以 4 個空格進行縮排(Use 4 spaces per indentation level)
利用 4 個空格取代 Tab
雖然 PEP8 中沒有強制規定不得使用 Tab 進行縮排,但為了不違反以 4 個空格進行縮排的原則,本文還是推薦將 Tab 設定為 4 空格,以避免不必要的混用。
Python 也提供縮排不一致的警告功能,只要在執行時加上 -t
就會在縮排不一致時跳出警告,如果要將這種縮排不一致的情況視為錯誤,可以改成加上 -tt
。
例如:
$ python -tt your_python_script.py
限制每行最多 79 字元
限制註解或者長字串不超過每行 72 字元
Top level 的函數與類別之間用空 2 行進行區隔 (Separate top-level function and class definitions with two blank lines)
類別內的方法,以空 1 行進行區隔程式檔案編碼應使用 UTF-8
(Code in the core Python distribution should always use UTF-8)
Import 模組應該 1 行 1 個
例如:
# Yes:
import os
import sys
# No:
import sys, os
Import 需有次序之別,並且群組間以空行區隔
Imports should be grouped in the following order:
- standard library imports
- related third party imports
- local application/library specific imports
You should put a blank line between each group of imports.
儘量別使用 Wildcard imports,例如 from <module> import *
不需使用空格對齊(寫 C 的人可能會有這種習慣)
# Yes:
x = 1
y = 2
long_variable = 3
# No:
x = 1
y = 2
long_variable = 3
不需在參數的等號(=)旁邊增加空格
Don’t use spaces around the = sign when used to indicate a keyword argument or a default parameter value
# Yes:
def complex(real, imag=0.0):
return magic(r=real, i=imag)
# No:
def complex(real, imag = 0.0):
return magic(r = real, i = imag)
模組名稱應儘量短,並全部小寫 (Modules should have short, all-lowercase names)
類別名稱應使用 CapWords 命名 (Class names should normally use the CapWords convention)
類別名稱每個單字首字大寫
函數名稱應使用小寫 (Function names should be lowercase)
常數(Constants)應大寫,並以底線分割單字
例如:
MAX_OVERFLOW = ...
TOTAL = ...
其他詳見:PEP8 - Style Guide for Python ode ,但實際上 coding style 還是可以依照各自需求做些變更,不一定要完全遵循 PEP8 ,主要還是看團隊如何達成共識。
Vim 設定
以下是編者撰寫 Python 時會使用到的基本 vim 設定:
set tabstop=4
set shiftwidth=4
set softtabstop=4
set smarttab
set expandtab
nnoremap <F2> :<C-U>setlocal lcs=tab:>-,trail:-,eol:$ list! list? <CR>
主要就是將 Tab 以 4 個空格取代,並且增加一個 F2 快捷鍵,可以顯示 Tab 與空格。 其他設定也可以透過 Google 搜尋,來調整各位習慣的使用環境。
Linter
最後介紹幾個不錯的套件,可以幫助大家找出 Python Script 中可能有錯的地方,或者違反 Coding Style 的部分:
有事沒事掃一下的話,還是很不錯的 :)
參考資料:
https://wiki.python.org/moin/Vim
https://pypi.python.org/pypi/flake8
https://pypi.python.org/pypi/pep8
https://pypi.python.org/pypi/autopep8