用 Python 快寫程式:附錄


Python 3 指令一覽表

False None True and as assert async await break class continue def del elif else except finally for from global if import in is lambda nonlocal not or pass raise return try while with yield
[] {} ' " : \ = + - * / % .


Python 3 內建函式一覽表

abs(x)
all(iterable)
any(iterable)
ascii(object)
bin(x)
bool([x])
breakpoint()
bytearray([source[, encoding[, errors]]])
bytes([source[, encoding[, errors]]])
callable(object)
chr(i)
classmethod(function)
compile(source, filename, mode, flags=0, dont_inherit=False,
        optimize=-1)
complex([real[, imag]])
delattr(object, name)
dict(**kwarg)
dict(iterable, **kwarg)
dict(mapping, **kwarg)
dir([object])
divmod(x, y)
enumerate(iterable, start=0)
eval(expression, globals=None, locals=None)
exec(object[, globals[, locals]])
filter(function, iterable)
float([x])
format(value[, format_spec])
frozenset([iterable])
getattr(object, name[, default])
globals()
hasattr(object, name)
hash(object)
help([object])
hex(x)
id(object)
input([prompt])
int(x=0)
int(x, base=10)
isinstance(object, classinfo)
issubclass(class, classinfo)
iter(object[, sentinel])
len(s)
list([iterable])
locals()
map(function, iterable, ...)
max(arg1, arg2, *args[, key])
max(iterable, *[, key])
memoryview(obj)
min(arg1, arg2, *args[, key])
min(iterable, *[, key])
next(iterator[, default])
object()
oct(x)
open(file, mode='r', buffering=-1, encoding=None, errors=None,
     newline=None, closefd=True, opener=None)
ord(c)
pow(x, y[, z])
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
property(fget=None, fset=None, fdel=None, doc=None)
range(stop)
range(start, stop[, step])
repr(object)
reversed(seq)
round(number[, ndigits])
set([iterable])
setattr(object, name, value)
slice(stop)
slice(start, stop[, step])
sorted(iterable[, key][, reverse])
staticmethod(function)
str(object='')
str(object=b'', encoding='utf-8', errors='strict')
sum(iterable[, start])
super([type[, object-or-type]])
tuple([iterable])
type(object)
type(name, bases, dict)
vars([object])
zip(*iterables)
__import__(name, globals=None, locals=None, fromlist=(), level=0)

已移除的 Python 2 內建函式:apply、basestring、buffer、cmp、coerce、execfile、intern、long、raw_input、reduce、reload、unichr、unicode、xrange。


鍵盤代碼


Python 編程風格指南(Style Guide for Python Code)

完整內容請見《Style Guide for Python Code》,底下是從官網擷取的內容:


縮排

以下都是允許的風格,並不只限於一種:


空白字元

使用 4 個空白字元,在 Python 用 Tab 縮排會被嘴得很慘。


每行字數

每行最多 79 個字元。


多行運算式

運算式要寫成多行的話,運算符放在每行前面,並與第一個運算子保持對齊:


原始碼檔案編碼

使用 UTF-8 字元編碼。


載入模組

除非 from,否則一行 import 一個模組,不要用 , 一次 import 多個模組:


字串

官方強調字串用 ' 還是 " 都一樣,這部分官方不做任何建議。

但多行字串的話,由於 PEP 257 Docstring Conventions 的關係,建議使用 " 符號:


在運算式和敘述句裡的空白

括號裡面:


在逗號後和右括號之間:


在逗號、冒號、分號前:


切開集合:


呼叫函式:


鍵值和索引:


指定運算:


四則運算:


函式注釋:


預設參數:


函式注釋和預設參數一起用時:


可以寫成多行的話,就不鼓勵使用複合語句:


最後是逗號結尾的排版風格:


註解

註解符號與註解內容之間隔一個空白,註解內容第一個字母要大寫。

註解寫在每行程式碼後面的話,註解符號前面隔一個空白,多行註解之間不要對齊:


邏輯

程式在設計上的寫法,邏輯直不直覺,也會影響可讀性:


函式傳回值的邏輯也要小心,經常寫出不嚴謹的設計:


另外,程式要放在 try 的話,最好把程式拆開來寫,讓 try 裡面的工作變簡單,這樣發生異常時才好處理,:


PEP 8 還寫了很多程式設計上的建議,更多內容請看官方文件的 Programming Recommendations 一節。


Python 之禪(The Zen of Python)

完整內容請見《The Zen of Python》,底下是中文翻譯:

優美勝於醜陋。
清楚勝於隱晦。
簡單勝於複雜。
複雜勝於凌亂。
平舖直述勝於深層嵌套。
間隔勝於緊湊。
可讀性很重要。
特殊情況也不足以打破上述原則。
尤其講求實用性時,它會打擊你遵守這些原則的想法。

不該無視錯誤訊息1
除非你確實打算關掉那個錯誤項目。

面對多種可能,不要隨便猜一個來用。
應該會有一種、也最好只有一種簡單明確的好做法。
雖然那個做法起先不覺得簡明2,但之後你會明白 Python 之父為何這麼設計。

動手去做勝過放著不做。
但放著不做有時比不認真做好。

如果實作的方式很難解釋,肯定是壞的設計。
如果實作的方式容易解釋,可能是好的設計。

命名空間是最棒的設計!

以上,讓我們基於這些原則,實際表現更多優點給大家看吧!


底線命名原則

variable:可正常存取的變數。
variable_:變數名稱重複時,習慣上在後面加個底線。
_variable:不建議有人存取這個變數時,習慣上在前面加個底線。
__variable:類別繼承時,不會共用該變數。
__variable__:Python 軟體基金會制定語言規格用的命名方式,不建議我們這樣命名。


從 PEP 594 看 Python 的變革

PEP 594 提案廢除二十多個標準程式庫裡的模組,包括 cgi 和 cgitb,已確定在 Python 3.13 刪除,Python 3.12 是最後一個包山包海的版本,新舊版本不相容的情形又更惡化了…

在 Python 還是冷門語言、生態還不是那麼發達的年代,主打 batteries included(內建電池),盡可能在標準程式庫通包所有功能,以簡化開發者的工作量。現在不一樣,Python 有第一大的生態,開始拋棄 batteries included 這項理念,刪除內建的模組,藉以鼓勵使用者使用第三方模組,進一步壯大 Python 生態的影響力!

Python 將不再是那個把事情變得簡單的程式設計方案,而是把事情做得更好但同時變得複雜的某種產業標準,也就是不再為電腦初學者設想,而是為從業者量身訂做,成為忘失初衷的程式語言。

這不見是壞事!能跟上時代的變化,必然會是比之前更好的 Python 語言!只是過往推廣 Python 時所聲稱的簡單易用哲學,將不再適用這門語言,Python 會成為專門用來滿足科技產業需求的小複雜語言,屆時我們又會推廣某個比 Python 更簡易好用的新語言~