標題:

program的模組是甚麼?

發問:

程式的模組是甚麼? 下面這個可以算是一個模組嗎? C:=A+B; 我讀CIT這科的, 希望回答者能提供較標準的答案, 謝謝. 更新: 文字太長.. 也有點複雜.. ~"~ 我初學程式, 是用pascal..

最佳解答:

6. 模組 如果你離開Python直譯器然後又再打開Python直譯器的話,你會發現你剛才定義的一些東西(函式或變數)都不再存在了。所以說,如果你真的想寫一些比較大型的程式的話,你可能需要有一個文字編輯器來編輯一個檔案,然後再讓Python直譯器來將這個檔案當作輸入(input)來處理。這個過程就是寫腳本( script )的過程。如果你的程式繼續的越來越長的話,你也許會想要把你的程式分成幾個小的檔案,這樣比較方便來維護你的程式。你也許也會希望有一些方便的函式可以讓你自由的用在好幾個程式之中,你又不想要copy這些函式的定義在每個程式之中。 要達到以上的這些目的,Python有一個將定義放在檔案中的方法,你可以之後再在你的script或是互動模式的程式下使用這些存好的定義。這樣的檔案就叫做模組( module )。存在於module之中的定義可以用 imported 放入在其他的module或是主要的 main module之中。(main module是一組你可以在script的最高一級 (top level)部分使用,或是在互動模式中使用的變數)。 一個module就是一個包含有Python的定義及敘述的檔案,檔案的名稱就是module的名稱加上延伸檔名 .py 在後面。在一個module裡面,module的名字(是一個字串)會存在 __name__ 這個變數裡面並當作全域變數(global variable)使用。舉例來說,你可以用你喜歡的文字編輯器打入以下的內容,並將這個檔案存在目前的目錄,並取名為 fibo.py : # Fibonacci numbers module def fib(n): # write Fibonacci series up to n a, b = 0, 1 while b < n: print b, a, b = b, a+b def fib2(n): # return Fibonacci series up to n result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a+b return result 現在你可以進入Python的直譯器裡面並且import 你剛剛建立的module,其方法如下: >>> import fibo 這個命令並不會使得所有的 fibo 裡面的函式名稱都寫入目前的符號表(symbol table)裡面,但是會把 fibo 這個module的名字寫在symbol table裡面。 所以,我們現在就可以使用module的名字來呼叫這些我們之前所定義的函式了: >>> fibo.fib(1000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 >>> fibo.fib2(100) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] >>> fibo.__name__ 'fibo' 如果你真的想要只用函式名稱的話,你可以把這些函式名稱設定到另一個local變數去(可以就是函式的名稱): >>> fib = fibo.fib >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 6.1 模組(續) 一個module裡面除了放函式的定義之外也可以放可執行的敘述(statement)。這些statement的功用在於初始化(initialize)這個module。這些statement也只有在module 第一次 被import的時候才會被執行。 6.1 每一個模組都有其自己的符號表(symbol table),這個symbol table也就成為在module裡面所定義的函式的全域變數(global variables)。所以說,寫module的人就可以自由的使用這些global variable而不需要擔心會跟module的使用者的global variable有所衝突。從另一方面來說,如果你知道自己在做什麼的話,你也可以跟使用函式一樣的使用module裡面的global variable。其語法為 modname.itemname. Module可以被import到其他的module裡面。習慣上(並非一定),我們會把所有的 import 的敘述都放在module(或者是script)的最開頭。這樣的話這個被import的module的名稱就會被放在目前這個module的global symbol table裡面了。 有一個變形的方式可以直接import module裡面的變數或函式的名稱進入symbol table裡面。舉例如下: >>> from fibo import fib, fib2 >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 這樣做的話並不會使得module的名字被放在目前的symbol table裡面。(所以在上面的例子裡 fibo 是沒有被定義的)。 我們甚至可以一次將所有的在module裡面所定義的名稱都import進來: >>> from fibo import * >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 這一個寫法會import所有的定義的名稱,除了以底線 ( _ ) 開頭的之外。

其他解答:

免費註冊體驗

 

此文章來自奇摩知識+如有不便請留言告知

arrow
arrow

    bgdwze3 發表在 痞客邦 留言(0) 人氣()