python 模塊 來了 (調包俠 修煉手冊一)


          模塊                            






什么是模塊
模塊:就是一系列功能的結合體 ,也可以說 一個.py文件包含了 Python 對象定義和Python語 那么 他就 可以說是 一個模塊
模塊的三種來源:
1.內置的(python解釋器自帶)**
2.第三方的 ***
3.自定義的  *
模塊的四種表現形式
1.使用python編寫的py文件(也就意味着py文件也可以稱之為模塊:一個py文件也可以稱之為一個模塊)
2.已被編譯為共享庫或DLL的C或C++擴展(了解)
3.把一系列模塊組織到一起的文件夾(文件夾下有一個__init__.py文件,該文件夾稱之為包)
包:一系列py文件的結合體
4.使用C編寫並連接到python解釋器的內置模塊

為什么要用模塊
1.用別人寫好的模塊(內置的,第三方的): 本質就是 拿來主義, 能夠 極大的提高開發效率
2.使用自己寫的模塊(自定義的):當程序比較龐大的時候,你的項目不可能只在一個py中
那么當多個文件中都需要使用相同的方法的時候 可以將該公共的方法寫到一個py文件中
其他的文件以模塊的形式導過去直接調用即可

如何使用模塊
注意:要區分哪個是執行文件,哪個是被導入文件

實例句式:>>>>
from  filemodul.modul1 import my_modu1

my_modul.func1 ()

"""
絕對導入必須依據執行文件所在的文件夾路徑為准
1.絕對導入無論在執行文件中還是被導入文件都適用


相對導入
.代表的當前路徑
..代表的上一級路徑
...代表的是上上一級路徑

注意相對導入不能再執行文件中使用
相對導入只能在被導入的模塊中使用,使用相對導入 就不需要考慮
執行文件到底是誰 只需要知道模塊與模塊之間路徑關系
"""

import my_modu12

"""
右鍵運行run_modul.py文件首先會創建一個run_modul.py的名稱空間
首次導入模塊(my_modul.py)(******)
1.執行my_modul.py文件
2.運行my_modul.py文件中的代碼將產生的名字與值存放到my_moddul.py名稱空間中
3.在執行文件中產生一個指向名稱空間的名字(my_modul)


多次導入不會再執行模塊文件,會沿用第一次導入的成果(******)
"""
money = 9999

def read1():
print('from run read1')
# 訪問模塊中的名字指向的值
# print(md.money) # 使用import導入模塊 訪問模塊名稱空間中的名字統一句勢:模塊名.名字




# md.read1()
# md.read2()
# print(md.change)

md1.change()
print(money)
print(md1.money)



"""
1.只要你能拿到函數名 無論在哪都可以通過函數加括號來調用這個函數(會回到函數定義階段 依次執行代碼)
2.函數在定義階段 名字查找就已經固定死了 不會因為調用位置的變化而改變




使用import導入模塊 訪問模塊名稱空間中的名字統一句勢:模塊名.名字
1.指名道姓的訪問模塊中的名字 永遠不會與執行文件中的名字沖突
2.你如果想訪問模塊中名字 必須用模塊名.名字的方式
"""

"""
只要當幾個模塊有相同部分或者屬於用一個模塊,可以使用上面的方法
當幾個模塊沒有聯系的情況下 應該分多次導入
import os
import time
import md
ps:通常導入模塊的句式會寫在文件的開頭
"""

"""
當模塊名字比較復雜的情況下 可以給該模塊名取別名





from my_modul_file import modul
當我們運行執行文件 ,執行文件 會先產生執行文件的名稱空間 ,然后 執行到 from my_modul_file import modul 語句 會執行一次
my_modul_file.py 文件一次 ,然后 生成屬於my_modul_file.py的名稱空間,接下來 會往執行文件中添加 相應對象名稱.
如果我們使用from md import * 的方式 ,可以一次性將所有的md文件中的名稱全部導入執行文件名稱空間中 ,但是不是很推薦這種寫法,如果導入
的模塊 我們不是很熟悉,那么 很多變量名會被占用 ,且該方法會浪費大量的資源.
如果實在要用 * 來載入 那么md 文件中的__all__[]方法 可以指定 當py文件被當做 模塊導入的時候 哪些名稱會被拿走 ,如果不寫 ,就默認是該文件
內的所有名稱.

如果出現循環導入問題 那么一定是你的程序設計的不合理
循環導入問題應該在程序設計階段就應該避免

解決循環導入問題的方式
1.方式1
將循環導入的句式寫在文件最下方()

2.方式2
函數內導入模塊
# print(__name__)
# 當文件被當做執行文件執行的時候__name__打印的結果是__main__
# 當文件被當做模塊導入的時候__name__打印的結果是模塊名(沒有后綴)
# if __name__ == '__main__':
# index1()
# index2()



# if __name__ == '__main__': # 快捷寫法 main直接tab鍵即可
# index1()
# index2()
"""
模塊的查找順序
1.先從內存中找
2.內置中找
3.sys.path中找(環境變量):
一定要分清楚誰是執行文件誰是被導入文件(******)

是一個大列表,里面放了一對文件路徑,第一個路徑永遠是執行文件所在的文件夾
"""
# import time
# import md
# time.sleep(20)
# md.f1()

# import time
# print(time.name)
#
# """
# 注意py文件名不應該與模塊名(內置的,第三方)沖突
# """
 
        

當一個模塊被導入到一個腳本,模塊頂層部分的代碼只會被執行一次。

因此,如果你想重新執行模塊里頂層部分的代碼,可以用 reload() 函數。該函數會重新導入之前導入過的模塊。語法如下:

reload(module_name)





免責聲明!

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



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