首頁 >後端開發 >Python教學 >Python中規格定義命名空間

Python中規格定義命名空間

高洛峰
高洛峰原創
2017-03-03 15:15:451200瀏覽

API的設計是一個藝術活。往往需要其簡單、易懂、整齊、不累贅。

很多時候,我們在底層封裝一個方法給高層用,而其它的方法只是為了輔助這個方法的。
也就是說我們只需要暴露這個方法就行,不用關心這個方法是怎麼實現的,不用關心其它輔助方法的存在。
在Python中,有幾種策略來保持命名空間的整潔。

1.變數命名用底線_開頭
下劃線_開頭的變數在其它模組from xxx import *的時候不被import。
如果你看decimal的源碼,你會發現多次把import 的模組弄成底線_開頭的別名。
http://hg.python.org/cpython/file/2.7/Lib/decimal.py例如

import copy as _copy
import math as _math
import numbers as _numbers

這不是蛋疼,是為了不污染命名空間

2.定義__all__
python的魔術方法實在是靈活。
假設我模組中有3個方法a(),b(),c()
我只是要暴露a而已,不需要暴露b和c。
這時__all__=[a]
在其它模組from xxxmodule import *的時候就只import了a了。
而且在開發者閱讀原始碼的時候,看到了__all__,一下子就知道要暴露的是哪些方法,而不是一堆程式碼無從下手。

3.在使用了這個變數後刪掉
透過del xxx刪掉。
這樣在dir(xxxmodule)的時候就減少了dir出來滿屏的變數了。
同樣在decimal的原始碼,可以看到使用了正規表示式模組re之後,用del re刪掉了。
還有一種方法就是把import語句放在函數內,將其限制在局部作用域中。感覺這種方法不是pythonic,就不推薦了。

更多Python中規範定義命名空間相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn