全系列在此 https://www.smalldragon.tw/effective-python-series/

目錄

  • Python 社群
  • Pythonic
  • PEP8

Python 社群

JavaScript 和 Python 在 GitHub 使用量為第一名和第三名(第二名是 Java),每天都有成千上萬行的程式碼被 push 到 GitHub 上,它們擁有強大的社群,稱得上「年輕有活力」的程式語言

那麼,社群能幫你什麼?如果你遇到一個演算法難題、一個 Web 開發的 bug,或是想學新語言、新框架,甚至是找些開放資料集和預訓練好的模型

你都可以在社群中找到提示、工具甚至是答案
(通常還會搭配 stackoverflow,新手的好夥伴 :D )


Credit: isogramconsulting.com

Pythonic 是啥

程式語言的慣用法(idioms)是由使用者定義的,同樣的問題,十種人可能有十種寫法,如果沒有一個慣用、流行的寫法,會造成溝通的效率低下、code review 很差,很可能會發生「明明都是某語言,我怎麼看不懂你寫的程式碼」這種窘境

Python 一開始設計時,為此寫一首叫做「The Zen of Python」的詩

import this
# ----------
# The Zen of Python, by Tim Peters

# Beautiful is better than ugly.
# Explicit is better than implicit.
# Simple is better than complex.
# Complex is better than complicated.
# Flat is better than nested.
# ......

漂亮、簡單、可讀性...等,都是 Python 語言的追求,因此產生了 Pythonic 這個形容詞,簡單來說就是符合上述追求的「Python 的標準化寫法(非必要)」

儘管如此,你也不一定要遵守,這只是一個主流的、通用的 coding style,幫助在社群交流中有一個參考的標準,也是一個「好的、漂亮的」Python 程式的條件之一

遵守 Pythonic 好處很多,無論作者只有你還是有其他協作者
更是判斷你是不是 Python 的中高階使用者的關鍵之一

PEP 8

PEP 全名為「Python Enhancement Proposal」,中文翻作「Python 增進建議書」,就是官方對所謂 Pythonic 提出的一個建議書

通常在社群中會遵守,也會要求任何加入的協作者一起遵守,


社群正在討論如何套用 PEP8 / Credit: GitHub

So, what is PEP8?

PEP 8 規範了一些基礎的語法的建議,包含命名、函式宣告、判斷式的建議,例如

  • 用四個空取代 tab 來縮排
  • functions 之間用兩個空行來隔開
  • 變數命名使用 snake_case,Model 命名用 CamelCase
max_amount_of_users = 10

def get_user_by_name(): # snake_case
    pass

class CustomerRecord: # CamelCase
    pass
  • import 一定要放在檔案的最上面
  • 盡量使用絕對名稱來匯入,而不是使用相對目前模組路徑的方法
# e.g.
# 要從 bar (package)匯入 foo (model or function)

import foo # 不好
from bar import foo # 比較好
from . import foo # 如果一定要用相對路徑,用這個

...還有很多有用的建議,你也可以參考 autopep8、pylint 這兩個套件,能夠提醒、幫你修改不合格式的地方

**建議把 PEP 8 認真的看一遍,對還不熟練 coding 的朋友蠻有幫助的 :D **

系列目錄