python學習筆記18(模組)
模組
概述:
隨著程式碼量越來越多,程式碼就越來越難以維護。為了解決難以維護的問題,我們把很多相似功能的函式分組,分別放到不同的檔案中取。這樣每個檔案所包含的內容相對較少,而且對於每一個檔案的大致功能可用用檔名來體現。很多程式語言都是這麼來組織程式碼結構。一個.py檔案就是一個模組
優點:
1、提高程式碼的可維護性
2、提高了程式碼的複用度,當一個模組完畢,可以被多個地方引用
3、引用其他的模組(內建模組和三方模組和自定義模組)
4、避免函式名和變數名的衝突
模組的建立:
示例:
#一個.py檔案就是一個模組 def sayGood(): print("sunck is a very good man!") def sayNice(): print("sunck is a nice man!") def sayHandsome(): print("sunck is a handsome man!") TT = 100 if __name__ == "__main__": sayGood() sayNice() sayHandsome() print(TT)
將上述程式碼儲存成sunck.py檔案,就建立了一個模組!
直接執行sunck.py輸出如下結果:
sunck is a very good man!
sunck is a nice man!
sunck is a handsome man!
100
__name__語句功能:
每一個模組都有一個__name__屬性,當其值等於"main"時,表明該模組自身在執行。否則被引入其他檔案。即當前檔案如果為程式的入口檔案,則__name__屬性的值為__main__
__name__語句作用:
在後面呼叫sunck模組時,不會輸出“ sunck is a very good man!……”內容。
編寫模組的典型格式:
def main():
pass
if __name__ == "__main__":
main()
引入模組:
1、import語句
格式 : import module1[, module2[, module3[……,moudeln]]]
import time, random, os
引入自定義模組,不用加.py字尾
import sunck
注意:一個模組只會被引入一次,不管你執行了多少次import。防止模組被多次引入
使用模組中的內容
格式:模組名.函式名/變數名
sunck.sayGood() print(sunck.TT)
2、from……import語句
作用: 從模組中匯入一個指定的部分到當前名稱空間
格式: from module import name1[, name2[, ……namen]]
from sunck import sayGood, sayNice
使用模組中的內容
格式:函式名/變數名
from sunck import sayGood
sayGood()
#輸出:sunck is a very good man!
注意: 程式內容的函式可以將模組中的同名函式覆蓋
from sunck import sayGood, sayNice
def sayGood():
print("********")
sayGood() #輸出:********
sayNice() #輸出:sunck is a nice man!
sayHandsome() #沒有引入handsome函式,報錯
3、from……import * 語句
作用: 把 一個模組中所有的內容全部匯入當前名稱空間
格式: from module import *
注意:最好不要過多的使用,且程式內的函式可以將模組中的同名函式覆蓋
from sunck import *
def sayGood():
print("********")
sayGood() #輸出:********
應用: 利用sys模組傳遞系統引數(在cmd命令列中執行並輸入對應的name, age, hoby)
#引入模組
import sys
print(sys.argv)
#獲取命令列引數的列表
for i in sys.argv:
print(i)
name = sys.argv[1]
age = sys.argv[2]
hoby = sys.argv[3]
print(name, age, hoby)
#自動查詢所需模組的路徑的列表
print(sys.path)
包
如果不同的人編寫的模組同名怎麼辦?
為了解決模組命名的衝突,引入了按目錄來組織模組的方法,稱為包
特點: 引入了包以後,只要頂層的包不與其他人發生衝突,那麼模組都不會與別人的發生衝突
注意: 目錄只有包含一個叫做"init.py"的檔案才被認作是一個包,基本上這個檔案中可以什麼也不寫
建立格式:
目錄1
模組a
模組b
__init__.py
目錄2
……
目錄的層數不限
引用格式:
import 目錄1.模組a
#同一目錄下的多個模組不能同時引入
import 目錄1.模組b
#使用
目錄1.模組a()
目錄1.模組b()