在乙個模組中,我們可能會定義很多函式和變數,但有的函式和變數我們希望給別人使用,有的函式和變數我們希望僅僅在模組內部使用。在python中,是通過_字首來實現的。
正常的函式和變數名是公開的(public),可以被直接引用,比如:abc,x123,pi等;
類似__***__這樣的變數是特殊變數,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊變數,hello模組定義的文件注釋也可以用特殊變數__doc__訪問,我們自己的變數一般不要用這種變數名;
類似_***和__***這樣的函式或變數就是非公開的(private),不應該被直接引用,比如_abc,__abc等;
之所以我們說,private函式和變數「不應該」被直接引用,而不是「不能」被直接引用,是因為python並沒有一種方法可以完全限制訪問private函式或變數,但是,從程式設計習慣上不應該引用private函式或變數。
private函式或變數不應該被別人引用,那它們有什麼用呢?請看例子:
def _private_1(name):
return 'hello, %s' % name
def _private_2(name):
return 'hi, %s' % name
def greeting(name):
if len(name) > 3:
return _private_1(name)
else:
return _private_2(name)
我們在模組裡公開greeting()函式,而把內部邏輯用private函式隱藏起來了,這樣,呼叫greeting()函式不用關心內部的private函式細節,這也是一種非常有用的**封裝和抽象的方法,即:
外部不需要引用的函式全部定義成private,只有外部需要引用的函式才定義為public。
python模組的定義,和模組的作用域
模組 為了編寫可維護的 我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的 就相對較少,很多程式語言都採用這種組織 的方式。在python中,乙個.py檔案就稱之為乙個模組 module 優點 最大的好處是大大提高了 的可維護性。其次,編寫 不必從零開始。當乙個模組編寫完畢,就可以被其他...
Python作用域 全域性作用域 區域性作用域
在python中,每個函式都會建立乙個作用域。pythonistas也可能稱函式擁有它們自己的命名空間 namespace 這意味著當在函式體裡遇到變數名 時,python首先在該函式的命名空間中查詢,python包含了一些讓我們檢視命名空間的函式。讓我們寫乙個簡單的函式來探查一下local和glo...
Python 五 包 模組 函式與變數作用域
condition 1 while condition 5 condition 1 print hello else print eof hello hello hello hello hello eof 主要是用來遍歷 迴圈 序列或者集合 字典 a a b c d 1,2,3 for x in a...