Python3中的模塊和包

目錄

1:模塊介紹

2:模塊的導入方式及過程

2.1:import,from xx  import yy

2.2:imp.reload 動態導入

2.3:模塊導入過程

3:Python中的包


 

1:模塊介紹

在Python中,每一個文件都是一個模塊,模塊是最高級別的程序組織單元,它將程序代碼和數據封裝起來以便再次利用,同時提供自包含的命名空間以便避免程序出現變量名衝突。模塊在導入其他模塊之後就可以使用被導入模塊中定義的名稱。

2:模塊的導入方式及過程

2.1:import,from xx  import yy

import:把一個模塊整體導入:

import  random
print(random.randint(1,20))

# 也可以取別名
# import  random as aaa
# print(aaa.randint(1,20))

from  :從一個模塊中獲得特定的名稱

# 導入模塊中的多個個屬性,方法等,
from random import randint,randrange
print(randint(1,20))

#也可以取別名
# from random import randint as aaa
# print(aaa(1,20))

2.2:imp.reload 動態導入

     在不終止Python程序的情況下,重新載入模塊文件代碼的方法。

2.3:模塊導入過程

import和from都是隱式的賦值語句:

import將整個模塊對象賦值給一個單獨的名稱。

from將一個或多個名稱賦值給另一個模塊中的同名對象。

每個進程中的單個模塊(文件)只做一次導入:模塊在第一次import或from時被載入並執行,在第二次及以後的導入時不會加載及運行,但會進行賦值操作。模塊在每次導入時會先去sys.modules中查找被導入的模塊是否存在於sys.modules中,如果存在說明已經導入過,不會做加載及運行操作,如果不存在,則對導入的模塊進行加載,並創建模塊中的對象,運行模塊中的調用的方法,完了之後把模塊信息寫入sys.modules中。因此模塊中的變量是全局的,可以在不同的模塊中進行共享,不會在每次導入中創建一個副本。

下面來驗證下:
fileA.py

lst = [1,2,3,4]
print("in fileA.py")

fileB.py  :導入模塊fileA

import fileA

fileA.lst.append("fileB")
print("in fileB.py")

fileC.py :導入模塊fileA

import fileA

fileA.lst.append("fileC")
print("in fileC.py")
test.py
print('--0001--')
from xmodule import fileB
print('--0002--')
from xmodule import fileC
print('--0003--')
import fileA
print('--0004--')
print(fileA.lst)

print('--0005--')
import imp
imp.reload(fileA)
print('--0006--')
print(fileA.lst)
print('--0007--')

/*
# 輸出結果:
--0001--   # 導入模塊B,模塊B中又導入模塊A,模塊A是本進程中第一次導入,故輸出如下:
in fileA.py  
in fileB.py
--0002--  # 導入模塊C,模塊C中又導入模塊A,但模塊A已被導入,故輸出如下: 
in fileC.py
--0003--  # 導入模塊A,但模塊A已被導入,故沒有輸出;還是會給fileA賦值,
--0004--  # 打印 fileA.lst
[1, 2, 3, 4, 'fileB', 'fileC']
--0005--  # imp.reload(fileA)  重新加載模塊fileA,lst被重新賦值
in fileA.py
--0006-- # 重新加載之後,lst被重新賦值
[1, 2, 3, 4]
--0007--

*/

3:Python中的包

    Python代碼的目錄被稱爲包,除模塊名之外,導入還可以指定目錄路徑,因此這樣的導入就稱之爲包導入。

    導入格式:
      import dir1.dir2.mod1
      from dir1.dir2.mod1 import a

      其中目錄dir1,dir2下需要有__init__.py文件

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章