模組

使用模組可以提高了程式碼的可維護性。其次,編寫程式碼不必從零開始。當一個模組編寫完畢,就可以被其他地方引用。我們在編寫程式的時候,也經常引用其他模組,包括Python內建的模組和來自第三方的模組;
使用模組還可以避免函式名和變數名衝突。相同名字的函式和變數完全可以分別存在不同的模組中,因此,我們自己在編寫模組時,不必考慮名字會與其他模組衝突。

作用域

有的函式和變數我們希望僅僅在模組內部使用。在Python中,是通過_字首來實現的。
__xxx__這樣的變數是特殊變數,可以被直接引用,但是有特殊用途,比如上面的author,__name__就是特殊變數,hello模組定義的文件註釋也可以用特殊變數__doc__訪問。
類似_xxx和__xxx這樣的函式或變數就是非公開的(private),不應該被直接引用,比如_abc,__abc。

安裝第三方模組

圖片Pillow模組
隨便找個圖片生成縮圖

from PIL import Image
im = Image.open('test.png')
print(im.format, im.size, im.mode)
PNG (400, 300) RGB
im.thumbnail((200, 100))
im.save('thumb.jpg', 'JPEG')

常用的第三方庫還有MySQL的驅動:mysql-connector-python,用於科學計算的NumPy庫:numpy,用於生成文字的模板工具Jinja2

面向物件程式設計

把計算機程式視為一系列的命令集合,把大塊函式通過切割成小塊函式來降低系統的複雜度。
可以接收其他物件發來的訊息,並處理這些訊息,計算機程式的執行就是一系列訊息在各個物件之間傳遞。

面向物件最重要的概念就是類(Class)和例項(Instance),必須牢記類是抽象的模板,比如Student類,而例項是根據類創建出來的一個個具體的“物件”,每個物件都擁有相同的方法,但各自的資料可能不同。

類可以起到模板的作用,因此,可以在建立例項的時候,把一些我們認為必須繫結的屬性強制填寫進去。通過定義一個特殊的__init__方法,在建立例項的時候,就把name,score等屬性綁上去:

class Student(object):
def init(self, name, score):
self.name = name
self.score = score

__init__方法的第一個引數永遠是self,表示建立的例項本身,因此,在__init__方法內部,就可以把各種屬性繫結到self,因為self就指向建立的例項本身。

類是建立例項的模板,而例項則是一個一個具體的物件,各個例項擁有的資料都互相獨立,互不影響;
方法就是與例項繫結的函式,和普通函式不同,方法可以直接訪問例項的資料;
通過在例項上呼叫方法,我們就直接操作了物件內部的資料,但無需知道方法內部的實現細節。

繼承和多型