Python導入模塊,Python import用法


使用 Python 進行編程時,有些功能沒必須自己實現,可以借助 Python 現有的標准庫或者其他人提供的第三方庫。比如說,在前面章節中,我們使用了一些數學函數,例如余弦函數 cos()、絕對值函數 fabs() 等,它們位於 Python 標准庫中的 math(或 cmath)模塊中,只需要將此模塊導入到當前程序,就可以直接拿來用。

前面章節中,已經看到使用 import 導入模塊的語法,但實際上 import 還有更多詳細的用法,主要有以下兩種:

  1. import 模塊名1 [as 別名1], 模塊名2 [as 別名2],…:使用這種語法格式的 import 語句,會導入指定模塊中的所有成員(包括變量、函數、類等)。不僅如此,當需要使用模塊中的成員時,需用該模塊名(或別名)作為前綴,否則 Python 解釋器會報錯。
  2. from 模塊名 import 成員名1 [as 別名1],成員名2 [as 別名2],…: 使用這種語法格式的 import 語句,只會導入模塊中指定的成員,而不是全部成員。同時,當程序中使用該成員時,無需附加任何前綴,直接使用成員名(或別名)即可。

注意,用 [] 括起來的部分,可以使用,也可以省略。

其中,第二種 import 語句也可以導入指定模塊中的所有成員,即使用 form 模塊名 import *,但此方式不推薦使用,具體原因本節后續會做詳細說明。

import 模塊名 as 別名

下面程序使用導入整個模塊的最簡單語法來導入指定模塊:

1 # 導入sys整個模塊
2 import sys
3 # 使用sys模塊名作為前綴來訪問模塊中的成員
4 print(sys.argv[0])
View Code

上面第 2 行代碼使用最簡單的方式導入了 sys 模塊,因此在程序中使用 sys 模塊內的成員時,必須添加模塊名作為前綴。

運行上面程序,可以看到如下輸出結果(sys 模塊下的 argv 變量用於獲取運行 Python 程序的命令行參數,其中 argv[0] 用於獲取當前 Python 程序的存儲路徑):

C:\Users\mengma\Desktop\hello.py

導入整個模塊時,也可以為模塊指定別名。例如如下程序:

1 # 導入sys整個模塊,並指定別名為s
2 import sys as s
3 # 使用s模塊別名作為前綴來訪問模塊中的成員
4 print(s.argv[0])
View Code

第 2 行代碼在導入 sys 模塊時才指定了別名 s,因此在程序中使用 sys 模塊內的成員時,必須添加模塊別名 s 作為前綴。運行該程序,可以看到如下輸出結果:

C:\Users\mengma\Desktop\hello.py

也可以一次導入多個模塊,多個模塊之間用逗號隔開。例如如下程序:

1 # 導入sys、os兩個模塊
2 import sys,os
3 # 使用模塊名作為前綴來訪問模塊中的成員
4 print(sys.argv[0])
5 # os模塊的sep變量代表平台上的路徑分隔符
6 print(os.sep)
View Code

上面第 2 行代碼一次導入了 sys 和 os 兩個模塊,因此程序要使用 sys、os 兩個模塊內的成員,只要分別使用 sys、os 模塊名作為前綴即可。在 Windows 平台上運行該程序,可以看到如下輸出結果(os 模塊的 sep 變量代表平台上的路徑分隔符):

C:\Users\mengma\Desktop\hello.py
\

在導入多個模塊的同時,也可以為模塊指定別名,例如如下程序:

1 # 導入sys、os兩個模塊,並為sys指定別名s,為os指定別名o
2 import sys as s,os as o
3 # 使用模塊別名作為前綴來訪問模塊中的成員
4 print(s.argv[0])
5 print(o.sep)
View Code

上面第 2 行代碼一次導入了sys 和 os 兩個模塊,並分別為它們指定別名為 s、o,因此程序可以通過 s、o 兩個前綴來使用 sys、os 兩個模塊內的成員。在 Windows 平台上運行該程序,可以看到如下輸出結果:

C:\Users\mengma\Desktop\hello.py
\

from  模塊名 import 成員名 as 別名

下面程序使用了 from...import 最簡單的語法來導入指定成員:

1 # 導入sys模塊的argv成員
2 from sys import argv
3 # 使用導入成員的語法,直接使用成員名訪問
4 print(argv[0])
View Code

第 2 行代碼導入了 sys 模塊中的 argv 成員,這樣即可在程序中直接使用 argv 成員,無須使用任何前綴。運行該程序,可以看到如下輸出結果:

C:\Users\mengma\Desktop\hello.py

導入模塊成員時,也可以為成員指定別名,例如如下程序:

1 # 導入sys模塊的argv成員,並為其指定別名v
2 from sys import argv as v
3 # 使用導入成員(並指定別名)的語法,直接使用成員的別名訪問
4 print(v[0])
View Code

第 2 行代碼導入了 sys 模塊中的 argv 成員,並為該成員指定別名 v,這樣即可在程序中通過別名 v 使用 argv 成員,無須使用任何前綴。運行該程序,可以看到如下輸出結果:

C:\Users\mengma\Desktop\hello.py

form...import 導入模塊成員時,支持一次導入多個成員,例如如下程序:

1 # 導入sys模塊的argv,winver成員
2 from sys import argv, winver
3 # 使用導入成員的語法,直接使用成員名訪問
4 print(argv[0])
5 print(winver)
View Code

上面第 2 行代碼導入了 sys 模塊中的 argv、 winver 成員,這樣即可在程序中直接使用 argv、winver 兩個成員,無須使用任何前綴。運行該程序,可以看到如下輸出結果(sys 的 winver 成員記錄了該 Python 的版本號):

C:\Users\mengma\Desktop\hello.py
3.6

一次導入多個模塊成員時,也可指定別名,同樣使用 as 關鍵字為成員指定別名,例如如下程序:

1 # 導入sys模塊的argv,winver成員,並為其指定別名v、wv
2 from sys import argv as v, winver as wv
3 # 使用導入成員(並指定別名)的語法,直接使用成員的別名訪問
4 print(v[0])
5 print(wv)
View Code

上面第 2 行代碼導入了 sys 模塊中的 argv、winver 成員,並分別為它們指定了別名 v、wv,這樣即可在程序中通過 v 和 wv 兩個別名使用 argv、winver 成員,無須使用任何前綴。運行該程序,可以看到如下輸出結果:

C:\Users\mengma\Desktop\hello.py
3.6

不推薦使用 from import 導入模塊所有成員

在使用 from...import 語法時,可以一次導入指定模塊內的所有成員(此方式不推薦),例如如下程序:

1 #導入sys 棋塊內的所有成員
2 from sys import *
3 #使用導入成員的語法,直接使用成員的別名訪問
4 print(argv[0])
5 print(winver)
View Code

上面代碼一次導入了 sys 模塊中的所有成員,這樣程序即可通過成員名來使用該模塊內的所有成員。該程序的輸出結果和前面程序的輸出結果完全相同。

需要說明的是,一般不推薦使用“from 模塊 import”這種語法導入指定模塊內的所有成員,因為它存在潛在的風險。比如同時導入 module1 和 module2 內的所有成員,假如這兩個模塊內都有一個 foo() 函數,那么當在程序中執行如下代碼時:

foo()

上面調用的這個 foo() 函數到底是 module1 模塊中的還是 module2 模塊中的?因此,這種導入指定模塊內所有成員的用法是有風險的。

但如果換成如下兩種導入方式:

import module1
import module2 as m2

接下來要分別調用這兩個模塊中的 foo() 函數就非常清晰。程序可使用如下代碼:

1 #使用模塊module1 的模塊名作為前綴調用foo()函數
2 module1.foo()
3 #使用module2 的模塊別名作為前綴調用foo()函數
4 m2.foo()
View Code

或者使用 from...import 語句也是可以的:

1 #導入module1 中的foo 成員,並指定其別名為foo1
2 from module1 import foo as fool
3 #導入module2 中的foo 成員,並指定其別名為foo2
4 from module2 import foo as foo2
View Code

此時通過別名將 module1 和 module2 兩個模塊中的 foo 函數很好地進行了區分,接下來分別調用兩個模塊中 foo() 函數就很清晰:

foo1() #調用module1 中的foo()函數
foo2() #調用module2 中的foo()函數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM