如何更好的運行Python解釋程序
如果突然進(jìn)行退出Python解釋程序然后再進(jìn)入,就會出現(xiàn)原有的函數(shù)和變量就丟失了,所以,如果需要寫長一點的程序,最好用一個文本編輯程序為解釋程序準(zhǔn)備輸入,這樣可以減少一些錯誤的發(fā)生。
然后以程序文件作為輸入來運行Python解釋程序,這稱為準(zhǔn)備腳本(script)。當(dāng)你的程序變長時,最好把它拆分成幾個文件以利于維護(hù)。你還可能想在幾個程序中都使用某個很方便的函數(shù)。
但又不想把函數(shù)定義賦值到每一個程序中。為了支持這些,Python有一種辦法可以把定義放在一個文件中然后就可以在一個腳本中或交互運行中調(diào)用。這樣的文件叫做一個模塊;
模塊中的定義可以導(dǎo)入其它模塊或主模塊(主模塊指在解釋程序頂級執(zhí)行的腳本或交互執(zhí)行的程序所能訪問的變量集合)。模塊是包含了Python定義和語句的文件。文件名由模塊名加上后綴“.py”構(gòu)成。在模塊內(nèi),模塊的名字(作為一個字符串)可以由全局變量__name__的值獲知。
例如,在Python的搜索路徑中用你習(xí)慣使用的文本編輯器(Python 1.5.2包含了一個用Tkinter編寫的IDLE集成開發(fā)環(huán)境,MS Windows下有一個PythonWin界面也可以進(jìn)行Python程序編輯)生成一個名為“fibo.py ”的文件,包含如下內(nèi)容:
- # Fibonacci numbers module
- def fib(n): # 輸出小于n的Fibonacci序列
- a, b = 0, 1
- while b < n:
- print b,
- a, bb = b, a+b
- def fib2(n): # 返回小于n的Fibonacci序列
- result = []
- a, b = 0, 1
- while b < n:
- result.append(b)
- a, bb = b, a+b
- return result
然后進(jìn)入Python解釋程序(在IDLE或PythonWin中可以直接進(jìn)入解釋程序窗口),用如下命令可以導(dǎo)入模塊:
- >>> 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'
這不會把模塊fibo中的函數(shù)的名字直接引入當(dāng)前的符號表,這只是把模塊名fibo引入。可以用模塊名來訪問其中的函數(shù):
- >>> from fibo import fib, fib2
- >>> fib(500)
- 1 1 2 3 5 8 13 21 34 55 89 144 233 377
- 這不會把模塊名導(dǎo)入使用者的符號表中(例如,上面例子中fibo就沒有定義)。
- 還有一種辦法可以導(dǎo)入一個模塊中定義的所有名字:
- >>> from fibo import *
- >>> fib(500)
- 1 1 2 3 5 8 13 21 34 55 89 144 233 377
模塊除了可以包含函數(shù)定義之外也可以包含可執(zhí)行語句。這些可執(zhí)行語句用來初始化模塊,它們只在模塊第一次被導(dǎo)入時執(zhí)行。每個模塊有自己私有的符號表,這個私有符號表對于模塊中的所有函數(shù)而言卻是它們的全局符號表。
因此,模塊作者可以在模塊中使用全局變量而不需擔(dān)心與模塊用戶的全局變量沖突。另一方面,如果你有把握的話也可以用訪問模塊中函數(shù)的格式,即modname.itemname的方法來修改模塊中的全局變量。模塊可以導(dǎo)入其它模塊。我們通常把所有的導(dǎo)入語句放在模塊(或腳本)的開始位置,這不是規(guī)定要求的。導(dǎo)入的模塊名放入模塊的全局符號表中。
【編輯推薦】