隨手養成 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

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!