python模組匯入import詳解.md
一.什麼是模組
模組就好比是工具包,要想使用這個工具包中的工具(就好比函式),就需要匯入這個
模組。
模組的本質就是一個.py檔案,裡面包含已經封裝好的類、方法等。模組匯入也即是使用這個py檔案中的變數、方法。
程式碼執行到模組匯入位置時,會預先載入(執行)匯入的模組。
二.分類
1.按位置分
- 常見的內建模組
python原始碼之中內建的模組,常見的有 time、random、os、mutilprocessing等
http://python.jobbole.com/86332/ - 外部安裝的模組
比如python寫遊戲的pygame模組、連線mysql資料庫的pymysql模組等。
一般匯入方式:
1. pip install 模組名(虛擬環境使用較多)
2. pycharm的setting --> plugins
注意:使用from匯入變數,而那些變數碰巧和作用域中現有的變數同名,本地變數就會被悄悄地覆蓋掉
2.按功能分
例如:時間模組time帶有多個時間方面的函式,而random模組主要是實現隨機功能。
三.模組的匯入方式
python語言中主要有三種方式
1.import
有5種形式:
import 模組(import 模組.方法 錯誤)
import 模組 as 別名
from 模組 import 方法(變數)
from 模組 import 方法(變數) as 別名
from 模組 import *
注意:模組名一般為檔名,且符合python識別符號規則(由數字字母下劃線組成,數字不能開頭)
import time
a = time.time()
print(a)
2. _import_
# 引數為模組名
module = __import__("time")
print(module.time())
3.getattr
# 引數一為模組物件,引數二為模組方法
module_fun = getattr(time, 'time')
print(module_fun())
使用案例
# 框架思想
import sys
action_list = sys.argv # 得到一個列表
moudle = __import__(action_list[ 1])
fun = getattr(moudle, action_list[2])
print(fun())
四.模組的儲存位置
1.常見系統路徑
當你匯入一個模組,Python解析器對模組位置的搜尋順序如下
import sys
print(sys.path)
#結果
[
'', #當前路徑
'/home/yz/desktop/test', #專案路徑
'/usr/lib/python35.zip',
'/usr/lib/python3.5',
'/usr/lib/python3.5/plat-x86_64-linux-gnu',
'/usr/lib/python3.5/lib-dynload',
'/usr/local/lib/python3.5/dist-packages',
'/usr/lib/python3/dist-packages'
]
2.查詢某個模組的路徑
import random
random.__file__
#結果
'/usr/lib/python3.5/random.py'
3.更改模組路徑
注意:路徑的修改只對當前檔案有效
五.實際應用
1. 重新載入
在終端命令列之中,A匯入模組B,當B修改之後,A仍然使用B被修改之前的程式碼。
這個時候就需要重新匯入。使用reload
form importlib import reload
reload(模組名)
2. 淺拷貝匯入
“import 模組”屬於淺拷貝,如果A修改了匯入的B變數,此時c匯入該B變數還是未修改的B.
3. 迴圈匯入
circular import異常:A匯入B,B匯入C,而C又匯入A,這樣構成了一個死迴圈。
解決:
1. 在函式方法內部匯入B,錯開匯入程式碼的執行順序
2. A、B©檔案合併或者找一個D文件來分離A/B/C。
六. 模組與包
清楚模組與包的區別!
1.模組:單個的py檔案
2.包:含有__init__.py檔案的資料夾。裡面一般有多個.py檔案。
注意:如果包的__init__.py檔案是空的,則 “from 包 import * ” 是無效的。
七. __all__和__name__
- 對於 ‘from 模組 import *’:A檔案裡有一個列表__all__=[ ],那麼其它檔案只能匯入A檔案中列表__all__的元素限定的變數。
- _name_
if __name__ == '__main__'
在A檔案中,其屬性__name__的值是_main_;而在其它檔案中,匯入的A.__name__的值是A的檔案(模組)名。