python flask中的程式碼約定
在Python社群中有許多關於程式碼風格的約定。如果你寫過一段時間Python了,那麼也許對此已經有些瞭解。 我會簡單介紹一下,同時給你一些URL連結,從中你可以找到關於這個話題的詳細資訊。
讓我們提出一個PEP!
PEP全稱是“Python Enhancement Proposal”(Python增強提案)。你可以在python.org上找到它們以及對應的索引目錄。 PEP在索引目錄中按照數字編號排列,包括了元PEP(meta-PEP,討論關於PEP的細節)。與之對應的是技術PEP(technical PEP),思考的是諸如Python內部實現的改良這樣的話題。
有一些PEP,比如PEP 8和PEP 257,影響了Python程式碼風格的標準。 PEP 8包括了Python程式碼風格的規約。 而PEP 257包括了文件字串(docstrings, 在Python中給程式碼加文件的標準方式)的規約。
PEP 8: Python程式碼風格規約
PEP 8是對Python程式碼風格的官方規約。 我建議你閱讀它並將之付諸在Flask專案(以及其他Python專案)的開發實踐中。 當專案規模膨脹到多個包含成百上千行程式碼的檔案時,這樣做會使你的程式碼更加工整、瞭然。畢竟PEP 8的建議都是圍繞著實現更加可讀的程式碼這個目標。 另外,如果你的專案準備開源,潛在的奉獻者(contributors)會很高興看到你的程式碼是遵循PEP 8的。
一個至關重要的建議是每級縮排使用4個空格。不要使用tab。 如果你打破了這個規約,它將會成為你(以及你的隊友)在專案間切換的一個負擔。 這種不一致一向是任意語言心中的痛,但是對於Python,一門著重留白的語言,這是一個不可承受之重。 因為tab與space之間的混搭會導致不可預期且難以排查的錯誤。
PEP 257: 文件字串規約
PEP 257 覆蓋了Python的另一項標準:docstrings。 你可以閱讀PEP中的定義和相關建議,不過這裡會給一個例子來展示一個文件字串應該是怎樣的:
def launch_rocket():
"""主要的火箭發射排程器
啟動發射火箭所需的每一個步驟。
"""
# [...]
這種風格的文件字串可以通過一些諸如Sphinx的軟體來生成不同格式的文件。 同時它們也有助於讓你的程式碼更加工整。
相對形式的import
開發Flask應用時,使用相對形式的import會讓你的生活更加輕鬆。 原因很簡單。之前,當需要import一個內部模組時,你也許要顯式指明應用的包名(the app's package name)。假設你想要從myapp/models.py
User
模型:
# 使用絕對路徑來匯入User
from myapp.models import User
用了相對形式的import後,你可以使用點標記法:第一個.
來表示當前目錄,之後的每一個.
表示下一個父目錄。
# 使用相對路徑來匯入User
from .models import User
這種做法的好處在於使得package變得更加模組化了。 現在你可以重新命名你的package並在別的專案中重用模組,而無需忍受更新被硬編碼的包名之苦。
參見
- 你可以在PEP 328的這一節裡讀到更多關於相對形式的import的語法
- 在寫作本書的過程中,我碰巧在這個Tweet上面看到了一個使用相對形式的import的好處:https://twitter.com/dabeaz/status/372059407711887360Just had to rename our whole package. Took 1 second. Package relative imports FTW!
總結
- 儘量遵循PEP 8中的程式碼風格規約。
- 儘量遵循PEP 257中的文件字串規約。
- 使用相對形式的import來import你的應用中的內部模組。