Python 中的模塊概述及模塊定義使用

模塊概述

在Python中,一個 .py 文件就是一個模塊(Module)。python

爲了不模塊名衝突,Python又引入了按目錄來組織模塊的方法,稱爲包(Package)。web

mycompany
 ├─ web
 │  ├─ __init__.py
 │  ├─ utils.py
 │  └─ www.py
 ├─ __init__.py
 ├─ abc.py
 ├─ xyz.py
 └─ utils.py

引入了包之後,只要頂層的包名不與別人衝突,那全部模塊都不會與別人衝突。函數

如今,abc.py模塊的名字就變成了mycompany.abcxyz.py的模塊名變成了mycompany.xyzwww.py模塊的名字就變成了mycompany.web.www,兩個文件utils.py的模塊名分別是mycompany.utilsmycompany.web.utils測試

每個包目錄下面都會有一個__init__.py的文件,這個文件是必須存在的,不然,Python就把這個目錄當成普通目錄,而不是一個包。__init__.py能夠是空文件,也能夠有Python代碼。編碼

模塊名不能和系統模塊名衝突,最好先查看系統是否已存在該模塊,查看方法是在Python交互環境中執行import abc,若成功則說明系統已經存在此模塊。命令行

編寫模塊

編寫一個 hello.py 模塊:code

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

__author__ = 'Michael Liao'

import sys

def test():
    args = sys.argv
    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行是標準註釋,可讓這個 .py 文件直接在 Unix/Linux/Mac 上運行;utf-8

第2行是標準註釋,表示 .py 文件使用標準UTF-8編碼;ci

第4行是一個字符串,表示模塊的文檔註釋,任何模塊代碼的第一個字符串都被視爲模塊的文檔註釋;文檔

第6行使用 __author__ 特殊變量記錄做者名稱;

第8行導入系統內建的sys模塊,sys 模塊有一個 argv 變量,用list存儲了命令行的全部參數。argv至少有一個元素,第一個參數永遠是該 .py 文件的名稱。

運行 python3 hello.py得到的 sys.argv就是 ['hello.py']

運行python3 hello.py Wu得到的sys.argv就是['hello.py', 'Wu']

最後兩行代碼的意義爲:當咱們在命令行運行 hello 模塊文件時,Python解釋器把一個特殊變量 __name__ 置爲 __main__,而若是在其餘地方導入該hello模塊時則不會設置,所以這種if測試可讓一個模塊經過命令行運行時執行一些額外的代碼,最多見的就是運行測試。

測試運行

咱們能夠用命令行運行 hello.py 看看效果:

$ python3 hello.py
Hello, world!

$ python hello.py Wu
Hello, Wu!

若是啓動Python交互環境,再導入hello模塊:

$ python3
>>> import hello
>>>

導入時,沒有打印 Hello, word!,由於沒有執行test()函數。

這時候須要調用 hello.test() ,才能打印出Hello, word!

>>> hello.test()
Hello, world!
相關文章
相關標籤/搜索