模組

巨莽提供數量龐大不同用途的「預鑄功能」(function)或是類似的東西,這些預鑄的 功能可以讓我們的程式更簡單地達到所要做的事情。在這本書中我們將會提到很多的 預鑄功能,但這些預鑄功能僅僅佔所有眾多數量的1%而已。因為這些預鑄功能實在太多了, 所以我們按功能的相關性,將它們集合起來,這些集合就稱為「模組」(module)。

輸入模組

就如前面所提的,你可以將模組想像為一個多功能的組合,裡面含有很多預鑄的功能。 (模組真正的定義有些複雜,你現在並不需要這種複雜的定義。)在你能開始使用任何 一個模組中的功能以前,你必須先「輸入」(import)這個模組。

要輸入一個模組中(所以你可以用內含的預鑄功能),可用下面的指令來達成:

>>> import stuff      ("stuff" 只是舉例,請參看下面的註腳。)

之後,你的程式就可以使用包含在 stuff [1] 中的東西。這些東西的名字 通常會叫做 stuff.thingy 。也就是在模組的名字後面加上預鑄功能的名字,然後 兩者之間用一個點分隔開來。這樣,就算是不同模組中的預鑄功能,都是叫相同名字的, 也不會搞混。 這有點像是電話號碼的情形,例如:張三住在台北,他的電話號碼是 123456。李四住在 高雄,他的電話號碼也是 123456。當你從台中打電話給張三時,他的電話號碼就 是 02-123456,而你打電話給李四時,他的電話號碼就是 04-123456。雖然張三與李四的 電話號碼是一樣的,但是因為增加了區碼在電話號碼前面,所以張三的電話也不會與李四 的電話混淆。同樣的,雖然兩個模組中預鑄功能的名字相同,但因為增加了模組的名字 在前面,所以巨莽也可以很清楚的把兩個預鑄功能區分開來。

註腳

[1]stuff 在這裡只是舉例,它一個虛構的模組名字,實際上並不存在這個 模組。在使用時,應該用正確的模組名字取代。例如:日期和時間的模組 time。 所用的指令就是 import time

方便,但是有點危險的方法

在編寫程式時,一直重複輸入模組的名字,有時候會很煩人。巨莽提供了一種方法讓你 可以很容易的使用預鑄功能,而不需要將整個模組的名字加在前面。例如:

>>> from stuff import blarp,weeble

這樣做就會從 stuff 模組中輸入 stuff.blarp 及 stuff.weeble 兩個預鑄功能, 但是在使用時,也可以用比較短的名字,blarp 及 weeble,來稱呼它們。 (用上面的方法,只會從模組中輸入這兩個功能,其他的功能都不會輸入。)

你會發現,在編寫程式時,假如常常用到這兩組預鑄功能,能用較短的名字來稱呼它們, 將會是很方便的。

模組與預鑄功能

對於「預鑄功能」、和「模組」之間的關係,就像是廚房裡「廚具」、「櫃子」的關係。 而「輸入」就有點像「從櫃子拿到廚房內」的動作。

當我們想做一碗牛肉麵的時後,除了牛肉、麵、和湯等的原料之外,我們也需要菜刀、 鍋子、瓢子、和爐子等的「廚具」。我們要切牛肉,所以就需要一把叫做「菜刀」的 廚具。當我們要煮麵的時候,我們就找一種叫做「鍋子」的廚具。這些「廚具」到了 電腦軟體的世界,就是我們所說的「預鑄功能」。

因為有這些「廚具」,我們才能夠很容易,很快的煮好一碗牛肉麵。同樣的,因為巨莽 的世界裏有「預鑄功能」,所以我們可以很快的編寫出有用(有趣又好玩)的程式。

這些刀子、鍋子等,都是其他人先用不同的材料和不同的方法先做好的「廚具」,供你 使用。巨莽的世界內也有其他人(或你自己),事先做好的「預鑄功能」,供你在編寫 程式時使用。

而「模組」就有點像廚房內的「櫃子」。「櫃子」是收集「廚具」的地方,不同的櫃子 收集不同的廚具。有的櫃子專門放大小不同種類鍋子,也有的櫃子專門放長短厚薄不同 刀子。巨莽世界中的「櫃子」就被稱為「模組」,不同的「模組」收集不同種類的 「預鑄功能」。有的專門收集圖像功能的模組,有的專門收集遊戲功能的模組。

最後,當你要用廚具的時候,你必須先從櫃子中拿到廚房內,才能使用。巨莽世界中, 你必須先從模組中「輸入」預鑄功能後,才能在你的程式中使用它們。

更危險的方法

假如你經常會用到模組中很多的預鑄功能,你該怎麼做?當然,你可以用下面的方法:

>>> from stuff import *

這樣就會輸入所有在 stuff 模組中的預鑄功能(嚴格說,應該是幾乎所有的預鑄功能, 而非全部),而且當你使用時,你可以不加 stuff 在前面,而直接稱呼它們的名字。 通常來說,用上面的方法來輸入所有的預鑄功能,並不是一個好的辦法。因為有可能會 有另外一個模組中,也有相同名字的預鑄功能。假如真的碰上這樣的情形,那巨莽程式 可能會做出無法預期,而且很奇怪的動作。

只有在一種情形下,我們會建議你用這種方法來輸入預鑄功能,那就是你在做這本門課 裡面的練習時,可以使用這樣的方法。因為這本書模組的設計,是要讓你很容易上手, 也因為這本書的模組已經測試過,所以上面所提到名字重複的機率很低。

找出模組中到底有些什麼

在你輸入模組之後,你可以用 dir(stuff) 的指令來找出到底 stuff 模組中有哪些 預鑄功能(指已經被輸入的預鑄功能)。雖然這個指令沒有什麼太大的用途,但是假如 你有興趣知道到底輸入了什麼,你可以試試看這個指令。

一些有用的模組

在這個補充材料一開始的時候,我們就提到,巨莽有非常多的模組。在標準的巨莽環境下, 約有接近200多種模組可以使用。下面是最常用的幾個模組,你應該先概略了解它們是 哪一類的模組。至於其他的模組,假如你有興趣,你可以參考巨莽的說明文件。不過, 你應該先看過 《補充教材-O》 , 你才能了解什麼是 classes 及什麼是 objects。

sys 有關系統的模組 (複習:system=系統)
string 有關字串的模組 (複習:string=字串)
re
有關字串但功能更強大的模組
(註: re 是電腦專用名詞1)
math
有關數學運算及數學常數的模組
(複習:mathematic=數學,math是簡稱)
random 有關亂數的模組 (複習:random=隨機)
time 時間和日期的模組(複習:time=時間)