python 提供了乙個辦法,把這些定義存放在檔案中,為一些指令碼或者互動式的直譯器例項使用,這個檔案被稱為模組。
模組是乙個包含所有你定義的函式和變數的檔案,其字尾名是.py。模組可以被別的程式引入,以使用該模組中的函式等功能。這也是使用 python 標準庫的方法。
下面是乙個使用 python 標準庫中模組的例子。
import sys
print
('命令列引數如下:'
)for i in sys.ar**:
print
(i)print
('\n\npython 路徑為:'
, sys.path,
'\n'
)
執行結果如下所示:
$ python using_sys.py 引數1 引數2
命令列引數如下:
using_sys.py
引數1引數2
python 路徑為: [
'/root'
,'/usr/lib/python3.4'
,'/usr/lib/python3.4/plat-x86_64-linux-gnu'
,'/usr/lib/python3.4/lib-dynload'
,'/usr/local/lib/python3.4/dist-packages'
,'/usr/lib/python3/dist-packages'
]
1、import sys 引入 python 標準庫中的 sys.py 模組;這是引入某一模組的方法。
2、sys.ar** 是乙個包含命令列引數的列表。
3、sys.path 包含了乙個 python 直譯器自動查詢所需模組的路徑的列表。
使用 python 原始檔,只需在另乙個原始檔裡執行 import 語句,語法如下:
import module1[, module2[,... modulen]
當直譯器遇到 import 語句,如果模組在當前的搜尋路徑就會被匯入。
搜尋路徑是乙個直譯器會先進行搜尋的所有目錄的列表。如想要匯入模組 support,需要把命令放在指令碼的頂端:
def
print_func
( par )
:print
("hello : "
, par)
return
test.py 引入 support 模組:
# 匯入模組
import support
# 現在可以呼叫模組裡包含的函式了
support.print_func(
"runoob"
)
輸出結果:
$ python3 test.py
hello : runoob
乙個模組只會被匯入一次,不管你執行了多少次import。這樣可以防止匯入模組被一遍又一遍地執行。
當我們使用import語句的時候,python直譯器是怎樣找到對應的檔案的呢?
這就涉及到python的搜尋路徑,搜尋路徑是由一系列目錄名組成的,python直譯器就依次從這些目錄中去尋找所引入的模組。
這看起來很像環境變數,事實上,也可以通過定義環境變數的方式來確定搜尋路徑。
搜尋路徑是在python編譯或安裝的時候確定的,安裝新的庫應該也會修改。搜尋路徑被儲存在sys模組中的path變數,做乙個簡單的實驗,在互動式直譯器中,輸入以下**:
>>
>
import sys
>>
> sys.path[''
,'/usr/lib/python3.4'
,'/usr/lib/python3.4/plat-x86_64-linux-gnu'
,'/usr/lib/python3.4/lib-dynload'
,'/usr/local/lib/python3.4/dist-packages'
,'/usr/lib/python3/dist-packages'
]>>
>
sys.path 輸出是乙個列表,其中第一項是空串』』,代表當前目錄(若是從乙個指令碼中列印出來的話,可以更清楚地看出是哪個目錄),亦即我們執行python直譯器的目錄(對於指令碼的話就是執行的指令碼所在的目錄)。
因此若像我一樣在當前目錄下存在與要引入模組同名的檔案,就會把要引入的模組遮蔽掉。
了解了搜尋路徑的概念,就可以在指令碼中修改sys.path來引入一些不在搜尋路徑中的模組。
現在,在直譯器的當前目錄或者 sys.path 中的乙個目錄裡面來建立乙個fibo.py的檔案,**如下:
# 斐波那契(fibonacci)數列模組
deffib
(n):
# 定義到 n 的斐波那契數列
a, b =0,
1while b < n:
print
(b, end=
' ')
a, b = b, a+b
print()
deffib2
(n):
# 返回到 n 的斐波那契數列
result =
a, b =0,
1while b < n:
a, b = b, a+b
return result
然後進入python直譯器,使用下面的命令匯入這個模組:
import fibo
這樣做並沒有把直接定義在fibo中的函式名稱寫入到當前符號表裡,只是把模組fibo的名字寫到了那裡。
可以使用模組名稱來訪問函式:
>>
>fibo.fib(
1000)1
1235
8132134
5589
144233
377610
987>>
> fibo.fib2(
100)[1
,1,2
,3,5
,8,13
,21,34
,55,89
]>>
> fibo.__name__
'fibo'
如果你打算經常使用乙個函式,你可以把它賦給乙個本地的名稱:
>>
> fib = fibo.fib
>>
> fib(
500)11
2358
1321
3455
89144
233377
python 模組相互import
模組a中import b,而在模組b中import a。這時會怎麼樣呢?這個在python列表中由robertchen給出了詳細解釋,抄錄如下 a.py from b import d class c pass b.py from a import c class d pass 為什麼執行a的時候不...
Python學習 import已有模組
一 先看程式 coding utf 8 import math print math.pi print math.sin math.pi 2 列印math模組提供的功能 print dir math 輸出結果 二 總結 1 在python用import或者from.import來匯入相應的模組,例如...
python模組import匯入 1 15
函式 將一組 組織到一起,實現某種功能 模組 為實現某種邏輯將相關連的函式寫在同乙個檔案裡,使邏輯更清楚,這就是乙個模組 在python中檔案以.py結尾的,那這個.py檔案就可以稱為模組 模組共分為三種 python標準庫 第三方模組 應用程式自定義模組 相同名字的函式和變數可以分別存在不同的模組...