在一個模塊中,我們可能會定義很多函數(shù)和變量,但有的函數(shù)和變量我們希望給別人使用,有的函數(shù)和變量我們希望僅僅在模塊內(nèi)部使用。在Python中,是通過_前綴來實現(xiàn)的。 正常的函數(shù)和變量名是公開的(public),可以被直接引用,比如:abc,x123,PI等; 類似__xxx__這樣的變量是特殊變量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊變量,hello模塊定義的文檔注釋也可以用特殊變量__doc__訪問,我們自己的變量一般不要用這種變量名; 類似_xxx和__xxx這樣的函數(shù)或變量就是非公開的(private),不應該被直接引用,比如_abc,__abc等; 之所以我們說,private函數(shù)和變量“不應該”被直接引用,而不是“不能”被直接引用,是因為Python并沒有一種方法可以完全限制訪問private函數(shù)或變量,但是,從編程習慣上不應該引用private函數(shù)或變量。 private函數(shù)或變量不應該被別人引用,那它們有什么用呢?請看例子: 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()函數(shù),而把內(nèi)部邏輯用private函數(shù)隱藏起來了,這樣,調(diào)用greeting()函數(shù)不用關心內(nèi)部的private函數(shù)細節(jié),這也是一種非常有用的代碼封裝和抽象的方法,即: 外部不需要引用的函數(shù)全部定義成private,只有外部需要引用的函數(shù)才定義為public。
|
|