Python裡__all__變數的作用
在Python的模組裡,要想像C語言編寫的DLL動態連線庫一樣,可以提供函式的介面名稱,就需要使用__all__變數了。通過這個特性,可以控制哪些函式被外面引用,哪些不能看見。這對一個大工程的軟體來說是至關重要,因為沒有控制的暴露,會導致別的軟體開發人員亂用,從而讓軟體呼叫之間出現隱形的問題。比如只給出一個介面的元件,肯定比給出一千個介面的元件使用起來簡單。因此,在一個團隊的開發配合中,一定要明確這樣一條準則:能少不能多,夠用就好。把無關重要的介面暴露出來,就會導致更多的問題。
__all__ = ['test1']
def test1():
print("-----test1-----")
def test2():
print("-----test2-----")
在這段程式碼裡,只暴露了test1介面,而test2介面看不到。在模組的一開始定義 __all__ 變數,import該模組後,只能找到 __all__中存在的變數或者函式,其他的不能呼叫。
不像 C或者 Java,Python 沒有語言原生的可見性控制,而是靠一套需要大家自覺遵守的”約定“下工作。比如下劃線開頭的應該對外部不可見。同樣,__all__ 也是對於模組公開介面的一種約定,比起下劃線,__all__ 提供了暴露介面用的”白名單“。一些不以下劃線開頭的變數(比如從其他地方 import 到當前模組的成
相關文章
- python變數與變數作用域Python變數
- python變數作用域中容易忽略的點Python變數
- Python 函式和變數作用域Python函式變數
- Python迴圈語句中的索引變數作用域Python索引變數
- lisp 變數的作用域Lisp變數
- 變數作用域變數
- Python函式引數傳遞以及變數作用域Python函式變數
- java中變數的作用域Java變數
- JavaScript 變數的作用域鏈JavaScript變數
- JS變數作用域JS變數
- SCSS 變數作用域CSS變數
- golang變數作用域Golang變數
- 『無為則無心』Python函式 — 30、Python變數的作用域Python函式變數
- 基礎 變數的作用範圍變數
- 現代 JavaScript 的變數作用域JavaScript變數
- Go語言中的變數作用域Go變數
- Shell變數的作用域問題變數
- 變數的作用域--js閉包變數JS
- 理解 Javascript 中變數的作用域JavaScript變數
- PL/SQL變數作用域SQL變數
- LoadRunner變數作用域變數
- C# 變數作用域C#變數
- 閉包裡的自由變數變數
- Django裡URL配置中name引數的作用Django
- Go 中的動態作用域變數Go變數
- 注意for迴圈中變數的作用域變數
- MySQL 設定變數的副作用薦MySql變數
- c++臨時變數的作用域C++變數
- javascript中的作用域(全域性變數和區域性變數)JavaScript變數
- 變數物件與作用域鏈變數物件
- JavaScript中變數和作用域JavaScript變數
- JavaScript之變數及作用域JavaScript變數
- Go 語言變數作用域Go變數
- JavaScript變數作用域之殤JavaScript變數
- Python入門(十八):變數作用域與巢狀函式Python變數巢狀函式
- golang變數作用域問題-避免使用全域性變數Golang變數
- Perl中的變數作用範圍 local, my, our與全域性變數變數
- PHP 變數的四大作用域PHP變數