Python 模組 import 語句的使用

2021-10-11 23:09:16 字數 3340 閱讀 2711

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標準庫 第三方模組 應用程式自定義模組 相同名字的函式和變數可以分別存在不同的模組...