python模組的定義,和模組的作用域

2021-10-23 13:49:55 字數 2729 閱讀 9872

模組: 為了編寫可維護的**,我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的**就相對較少,很多程式語言都採用這種組織**的方式。在python中,乙個.py檔案就稱之為乙個模組(module)。

優點:最大的好處是大大提高了**的可維護性。其次,編寫**不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用。我們在編寫程式的時候,也經常引用其他模組,包括python內建的模組和來自第三方的模組。使用模組還可以避免函式名和變數名衝突。相同名字的函式和變數完全可以分別存在不同的模組中,因此,我們自己在編寫模組時,不必考慮名字會與其他模組衝突。但是也要注意,盡量不要與內建函式名字衝突。

包:如果不同的人編寫的模組名相同怎麼辦?為了避免模組名衝突,python又引入了按目錄來組織模組的方法,稱為包(package)。舉個例子,乙個abc.py的檔案就是乙個名字叫abc的模組,乙個xyz.py的檔案就是乙個名字叫xyz的模組。假設我們的abcxyz這兩個模組名字與其他模組衝突了,於是我們可以通過包來組織模組,避免衝突。方法是選擇乙個頂層包名,比如mycompany,按照如下目錄存放:

mycompany

├─ __init__.py

├─ abc.py

└─ xyz.py

引入了包以後,只要頂層的包名不與別人衝突,那所有模組都不會與別人衝突。現在,abc.py模組的名字就變成了mycompany.abc,類似的,xyz.py的模組名變成了mycompany.xyz

請注意,每乙個包目錄下面都會有乙個__init__.py的檔案,這個檔案是必須存在的,否則,python就把這個目錄當成普通目錄,而不是乙個包。__init__.py可以是空檔案,也可以有python**,因為__init__.py本身就是乙個模組,而它的模組名就是mycompany。 

類似的,可以有多級目錄,組成多級層次的包結構。比如如下的目錄結構:

mycompany

├─ web

│ ├─ __init__.py

│ ├─ utils.py

│ └─ www.py

├─ __init__.py

├─ abc.py

└─ utils.py

模組的規範寫法:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

' a test module '

__author__ = 'michael liao'

import sys

def test():

args = sys.ar**

if len(args)==1:

print('hello, world!')

elif len(args)==2:

print('hello, %s!' % args[1])

else:

print('too many arguments!')

if __name__=='__main__':

test()

第1行和第2行是標準注釋。第1行注釋可以讓這個hello.py檔案直接在unix/linux/mac上執行,第2行注釋表示.py檔案本身使用標準utf-8編碼;

第3行是乙個字串,表示模組的文件注釋,任何模組**的第乙個字串都被視為模組的文件注釋;

第4行使用__author__變數把作者寫進去,這樣當你公開源**後別人就可以瞻仰你的大名;

以上就是python模組的標準檔案模板,當然也可以全部刪掉不寫,但是,按標準辦事肯定沒錯。

後面開始就是真正的**部分。

最後兩行**:命令列執行hello模組檔案時,python直譯器把乙個特殊變數__name__置為__main__,而如果在其他地方匯入該hello模組時,if判斷將失敗,因此,這種if測試可以讓乙個模組通過命令列執行時執行一些額外的**,最常見的就是執行測試。

1.正常的函式和變數名是公開的(public),可以被直接引用,比如:abcx123pi等;

2.類似__***__這樣的變數是特殊變數,可以被直接引用,但是有特殊用途,比如上面的__author____name__就是特殊變數,hello模組定義的文件注釋也可以用特殊變數__doc__訪問,我們自己的變數一般不要用這種變數名;

3.類似_***__***這樣的函式或變數就是非公開的(private),不應該被直接引用,比如_abc__abc等;

外部不需要引用的函式全部定義成private,只有外部需要引用的函式才定義為public。

python模組定義和使用

模組相當乙個工具類,可以共用或者隱藏 細節,讓重點放在高層邏輯上.也能讓 塊和主程式分離 匯入模組,可以使用模組的所有方法 建立乙個模組,然後引用進來,可以呼叫模組裡所有方法 import make python make python.test function 中國 匯入模組指定方法 前面為模組...

python中模組的定義

python中模組的定義 myclass.py coding utf 8 模組的說明文件 module docstring 放置在在模組的import之前 成對的三個雙引號包裹 可以提供模組的簡要資訊,如 file filename author yourname date 2017 xx xx v...

python模組 python自定義模組

1.import 模組名 匯入模組中的所有內容 引入多個用逗號分隔 import random,time 2.from 模組名 import 函式名1,函式名2.匯入部分模組 匯入部分的話直接使用 3.from 模組名 import 匯入所有,有約束 需要在 init py檔案中新增屬性 all 函...