1. 程式人生 > >python學習筆記18(模組)

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()