一:模塊 1 在Python中,一個.py文件就稱之為一個模塊(Module) 2 Python的好處,優點: a 提高了代碼的可維護性 b 當一個模塊編寫完畢,就可以被其他地方引用。我們在編寫程式的時候,也經常引用其他模塊,包括Python內置的模塊和來自第三方的模塊。 3 使用模塊還可以避免函數 ...
一:模塊
1 在Python中,一個.py文件就稱之為一個模塊(Module)
2 Python的好處,優點:
a 提高了代碼的可維護性
b 當一個模塊編寫完畢,就可以被其他地方引用。我們在編寫程式的時候,也經常引用其他模塊,包括Python內置的模塊和來自第三方的模塊。
3 使用模塊還可以避免函數名和變數名衝突。相同名字的函數和變數完全可以分別存在不同的模塊中。但是也應該註意:函數名和變數名儘量不要與內置函數名字衝突。
4 為了避免模塊名衝突,Python又引入了按目錄來組織模塊的方法,稱為包(Package)。
mycompany ├─ __init__.py ├─ abc.py └─ xyz.py
引入了包以後,只要頂層的包名不與別人衝突,那所有模塊都不會與別人衝突。現在,abc.py
模塊的名字就變成了mycompany.abc
,類似的,xyz.py
的模塊名變成了mycompany.xyz
。
每一個包目錄下麵都會有一個__init__.py
的文件,這個文件是必須存在的,否則,Python就把這個目錄當成普通目錄,而不是一個包。__init__.py
可以是空文件,也可以有Python代碼,因為__init__.py
本身就是一個模塊,而它的模塊名就是mycompan(init左右都是2個下劃線)
5 類似的,可以有多級目錄,組成多級層次的包結構。比如如下的目錄結構:
mycompany
├─ web
│ ├─ __init__.py
│ ├─ utils.py
│ └─ www.py
├─ __init__.py
├─ abc.py
└─ xyz.py
文件www.py
的模塊名就是mycompany.web.www
6 自己創建模塊時要註意命名,不能和Python自帶的模塊名稱衝突。例如,系統自帶了sys模塊,自己的模塊就不可命名為sys.py,否則將無法導入系統自帶的sys模塊。最好先查看系統是否已存在該模塊,檢查方法是在Python交互環境執行import abc
,若成功則說明系統存在此模塊。
二:使用模塊
1
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
__author__ = 'Michael Liao'
第1行和第2行是標準註釋,第1行註釋可以讓這個hello.py
文件直接在Unix/Linux/Mac上運行,第2行註釋表示.py文件本身使用標準UTF-8編碼;
第4行是一個字元串,表示模塊的文檔註釋,任何模塊代碼的第一個字元串都被視為模塊的文檔註釋;
第6行使用__author__
變數把作者寫進去,這樣當你公開源代碼後別人就可以瞻仰你的大名;
以上就是Python模塊的標準文件模板。
2 sys
模塊有一個argv
變數,用list存儲了命令行的所有參數。argv
至少有一個元素,因為第一個參數永遠是該.py文件的名稱。
3 import hello hello.test()
a 導入模塊:import 模塊名 或者 import 模塊名 as 新模塊名(這種方法適用於模塊名太長,調用或者使用不方便時的重命名)
b 導入指定的模塊屬性 :from 模塊名 import 屬性1,2,3,4...... eg:from ch6_1 import count,print.
4 在一個模塊中,我們可能會定義很多函數和變數,但有的函數和變數我們希望給別人使用,有的函數和變數我們希望僅僅在模塊內部使用。在Python中,是通過_
首碼來實現的。
a 正常的函數和變數名是公開的(public),可以被直接引用,比如:abc
,x123
,PI
等;
b 類似__xxx__
這樣的變數是特殊變數,可以被直接引用,但是有特殊用途,比如上面的__author__。我們自己的變數一般不要用這種變數名。
c 類似_xxx
和__xxx
這樣的函數或變數就是非公開的(private),不應該被直接引用,比如_abc
,__abc
等。
d 外部不需要引用的函數全部定義成private,只有外部需要引用的函數才定義為public。
5 模塊的搜索路徑:
a 當我們試圖載入一個模塊時,Python會在指定的路徑下搜索對應的.py文件,如果找不到,就會報錯。
b 預設情況下,Python解釋器會搜索當前目錄、所有已安裝的內置模塊和第三方模塊,搜索路徑存放在sys
模塊的path
變數中。
>>> import sys
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', ..., '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']
c
如果我們要添加自己的搜索目錄,有兩種方法:
一是直接修改sys.path
,添加要搜索的目錄:
>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')
這種方法是在運行時修改,運行結束後失效。
二是設置環境變數PYTHONPATH
,該環境變數的內容會被自動添加到模塊搜索路徑中。設置方式與設置Path環境變數類似。註意只需要添加你自己的搜索路徑,Python自己本身的搜索路徑不受影響。