模組和包

F.or,T發表於2019-01-22

1.  import

2.  from   inport

3.  模組引用中的情況

4.  包

 import

如何建立一個模組:

建立一個py檔案,給他起一個符合變數命名規則的名字,這個名字就是模組。

匯入模組的時候發生了什麼?   

1.找到模組,判斷模組是否被匯入過,(import   sys >>>>print(sys.模組名))。

2.如果模組沒有被匯入,就建立一個屬於這個模組的名稱空間。

3.讓模組名指向這個空間,然後執行該模組中的程式碼。

匯入一個模組就是執行了一個模組

import name
print(name.name)
print(name.read)
name.read()


123456
alex
hello,word

 

import name
bbb="jeav yang"
print(name.bbb)
# print(name.read)
name.read()
print(bbb)




123456
alex
hello,word
jeav yang

 

模組的別名:import  模組名   as   新的模組名   如果給模組起了別名,使用這個模組就能使用的別名的應用了

def func(dic, t='json'):
    if t == 'json':
        import json as aaa
    elif t == 'pickle':
        import pickle as aaa
    return aaa.dumps(dic)

 

匯入多個模組:

以os模組為例:import  os .time>>>>>>>import  os  as o,time  as  t

模組的匯入順序:

內建模組>>>>擴充套件模組>>>>自定義模組

 from import

怎麼使用from import:需要從哪個檔案中使用那個名字,就把這個名字匯入進來

egg:from
my_module import  name

引入from import 的時候,仍然執行了這個被匯入的檔案,就是import誰,就執行誰

from my_module import read1
read1()


12345
54321
hello world

 

 當前檔案名稱空間和模組的名稱空間問題:

如果被引用的名字在當前檔案中,就執行當前檔案的名字

from  import 匯入的時候發生了什麼

1.找到要被匯入的模組

2.判斷模組是否被匯入過

3.若沒有被匯入就建立一個屬於這個模組的名稱空間。

4.執行這個檔案

5.如果被匯入過,找到你要匯入的變數,給匯入的變數建立一個引用,指向要匯入的變數

匯入多個名字

 

from my_module import read1,read2
read1()
read2()



12345
54321
hello world
in read1 func alex

 

 

 

給匯入的名字起別名:避免匯入的名字和當前檔案中的名字重複:

from my_module import read1 as r1,read2 as r2
def read1():
    print('in my read1')
r1()
r2()
read1()


12345
54321
hello world
in read1 func alex
in my read1

 

其他操作

from my_module import *   表示執行匯入模組的所有內容

 

from my_module import *
name = 'egon'
print(name)   # egon
read1()
read2()  

12345
54321
egon
hello world
in read1 func alex

 

 

 

_all_約束*匯入的個數     _all_=[誰],就匯入誰,只能用來約束

模組引用中的情況

1.模組的迴圈引用     重點***

模組間不允許迴圈引用

2.模組的載入和修改

如果已經被匯入到的模組發生了修改,是不會被感知到的,想要修改的話就要重啟程式

3.把模組當成指令碼來使用  賊重要************

 

if __name__ == '__main__':
  程式碼
寫在這裡面的程式碼只有這個檔案被當做指令碼執行的時候才執行
當一個py檔案做指令碼的時候,就提供一個功能。當作為模組匯入的時候,能呼叫這個功能,但不能自主互動

 一個檔案中的_nane_變數:

當檔案被當做指令碼執行的時候,_name_=="_main_"

當檔案被當做模組匯入的時候,_name _=="模組的名字"

4.模組搜尋路徑

被當做指令碼執行檔案的時候,同目錄下的檔案可以直接匯入,除此之外,其他路徑下的模組被匯入的時候需要自己修改sys.path列表

 不在同一目錄下的話:就呼叫sys模組

import  sys

print(sys.path)

path=r"要匯入模組的路徑'

sys.path.append(path)

然後呼叫你要匯入的模組

import sys
print(sys.path)
path=r"F:\上課作業視訊\模組的相關知識\day21\code\day21\5模組的迴圈引用"
sys.path.append(path)
import hhh

['F:\\上課作業視訊\\模組的相關知識\\day21\\code\\day21', 'F:\\上課作業視訊', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', 'C:\\Program Files\\JetBrains\\PyCharm 2018.1.3\\helpers\\pycharm_matplotlib_backend']
123456798

 

 包:凡是匯入時帶點的,點的左邊必須是包

什麼是包:資料夾中有一個__int__.py檔案,也是幾個模組的集合

從包中匯入模組:

1.import方式

egg:

import glance.api.policy as hhh

hhh.get()

2.from import

from glance.api.import policy

egg:

from glance.api.policy import get

get()

 

相關文章