python
學習筆記(五)
--模組
在python中,乙個.py檔案就稱之為乙個模組(module)。
優點:
1、大大提高了**的可維護性。其次,編寫**不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用
2、使用模組還可以避免函式名和變數名衝突。相同名字的函式和變數完全可以分別存在不同的模組中,因此,我們自己在編寫模組時,不必考慮名字會與其他模組衝突。但是也要注意,盡量不要與內建函式名字衝突。點這裡
檢視python的所有內建函式。
為了避免模組名衝突,python又引入了按目錄來組織模組的方法,稱為包(package)。
舉個例子,乙個abc.py
的檔案就是乙個名字叫abc
的模組,乙個xyz.py
的檔案就是乙個名字叫xyz
的模組。
假設我們的abc和xyz這兩個模組名字與其他模組衝突了,於是我們可以通過包來組織模組,避免衝突。
方法是選擇乙個頂層包名,比如mycompany,按照如下目錄存放:
引入了包以後,只要頂層的包名不與別人衝突,那所有模組都不會與別人衝突。現在,abc.py模組的名字就變成了mycompany.abc,類似的,xyz.py的模組名變成了mycompany.xyz。
注意:每乙個包目錄下面都會有乙個
__init__.py的檔案,這個檔案是必須存在的,否則,python就把這個目錄當成普通目錄,而不是乙個包。__init__.py可以是空檔案,也可以有python**,因為__init__.py本身就是乙個模組,而它的模組名就是mycompany。
類似的,可以有多級目錄,組成多級層次的包結構。比如如下的目錄結構:
檔案www.py的模組名就是mycompany.web.www,兩個檔案utils.py的模組名分別是mycompany.utils和mycompany.web.utils。
自己建立模組時要注意命名,不能和python自帶的模組名稱衝突。例如,系統自帶了sys模組,自己的模組就不可命名為sys.py,否則將無法匯入系統自帶的sys模組。
mycompany.web也是乙個模組,請指出該模組對應的.py檔案
一、
模組使用
編寫乙個hello的模組:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
__author__ =
'michael liao'
importsys
def
test():
args = sys.argv
iflen(args)==1:
print(
'hello, world!')
eliflen(args)==2:
print(
'hello, %s!'
% args[1])
else:
print(
'too many arguments!')
if__name__==
'__main__':
test()
匯入sys
模組後,我們就有了變數sys
指向該模組,利用sys
這個變數,就可以訪問sys
模組的所有功能。
sys
模組有乙個argv
變數,用
list
儲存了命令列的所有引數。argv
至少有乙個元素,因為第乙個引數永遠是該
.py檔案的名稱,例如:
執行python3 hello.py
獲得的sys.argv
就是['hello.py']
;
執行python3 hello.py michael
獲得的sys.argv
就是['hello.py', 'michael]
。
當我們在命令列執行hello
模組檔案時,python直譯器把乙個特殊變數__name__
置為__main__
,而如果在其他地方匯入該hello
模組時,if
判斷將失敗,因此,這種if
測試可以讓乙個模組通過命令列執行時執行一些額外的**,最常見的就是執行測試。
作用域
:在
python
中,是通過_
字首來實現的。
1、正常的函式和變數名是公開的(public),可以被直接引用,比如:abc,x123,pi等;
2、類似_ _***_ _
這樣的變數是特殊變數,可以被直接引用,但是有特殊用途,比如上面的__author__
,__name__
就是特殊變數,hello
模組定義的文件注釋也可以用特殊變數__doc__
訪問,我們自己的變數一般不要用這種變數名;
3、類似_***
和_ _***
這樣的函式或變數就是非公開的(private),不應該被直接引用,比如_abc
,_ _abc
等;
def
_private_1(name):
return'hello,%s'
% name
def
_private_2(name):
return'hi,%s'
% name
def
greeting(name):
iflen(name) > 3:
return_private_1(name)
else:
return_private_2(name)
外部不需要引用的函式全部定義成private,只有外部需要引用的函式才定義為public。
二、
安裝第三方模組
安裝第三方模組,是通過包管理工具
pip完成的。
確保安裝時勾選了pip
和add python.exe to path
如果我們要新增自己的搜尋目錄,有兩種方法:
一是直接修改sys.path
,新增要搜尋的目錄:
>>>importsys
>>>'/users/michael/my_py_scripts'
)
這種方法是在執行時修改,執行結束後失效。
第二種方法是設定環境變數pythonpath
,該環境變數的內容會被自動新增到模組搜尋路徑中。設定方式與設定
path
環境變數類似。注意只需要新增你自己的搜尋路徑,
python
自己本身的搜尋路徑不受影響。
python學習筆記(五) 模組匯入
模組是乙個包含所有你定義的函式和變數的檔案,其字尾名是.py。模組可以被別的程式引入,以使用該模組中的函式等功能。這也是使用 python 標準庫的方法。1 模組的定義與分類 在python中模組實際上就是乙個以 py 結尾的原始碼檔案。其中模組主要可以分為三種 2 模組的匯入 使用 import ...
Python學習筆記 模組
模組,用一砣 實現了某個功能的 集合。類似於函式式程式設計和面向過程程式設計,函式式程式設計則完成乙個功能,其他 用來呼叫即可,提供了 的重用性和 間的耦合。而對於乙個複雜的功能來,可能需要多個函式才能完成 函式又可以在不同的.py檔案中 n個 py 檔案組成的 集合就稱為模組。如 os 是系統相關...
python學習筆記 模組
pickle模組實現了基本的資料序列和反序列化。通過pickle模組的序列化操作我們能夠將程式中執行的物件資訊儲存到檔案中去,永久儲存。通過pickle模組的反序列化操作,我們能夠從檔案中建立上一次程式儲存的物件。基本介面 pickle.dump obj,file,protocol 讀取方式開啟檔案...