模塊的操作

聲明:以下部分內容摘自《python基礎教程》

我們以copy模塊舉例。
首先我們導入copy模塊:

>>> import copy

1 我們想看copy模塊中有哪些函數、類、變量等我們想要使用的東西,使用dir()函數:

>>> dir(copy)
['Error', 'PyStringMap', '_EmptyClass', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_copy_dispatch', '_copy_immutable', '_copy_inst', '_copy_with_constructor', '_copy_with_copy_method', '_deepcopy_atomic', '_deepcopy_dict', '_deepcopy_dispatch', '_deepcopy_inst', '_deepcopy_list', '_deepcopy_method', '_deepcopy_tuple', '_keep_alive', '_reconstruct', '_test', 'copy', 'deepcopy', 'dispatch_table', 'error', 'name', 't', 'weakref']

出現了一大串名字,有的以下劃線開頭,有的不是。我們可以使用列表推導式過濾掉以下劃線開頭的:

>>> [n for n in dir(copy) if not n.startswith('_')]
['Error', 'PyStringMap', 'copy', 'deepcopy', 'dispatch_table', 'error', 'name', 't', 'weakref']

可以看到有copy函數和deepcopy函數,分別爲淺拷貝和深拷貝。

2 我們想知道怎麼用這些函數,可以利用標準函數help()來幫忙:

>>> help(copy.copy)
Help on function copy in module copy:

copy(x)
    Shallow copy operation on arbitrary Python objects.

    See the module's __doc__ string for more info.

這樣我們就知道copy()函數需要傳一個參數來使用,而且是淺複製。還可以看看文檔字符串__doc __string:

>>> print copy.copy.__doc__
Shallow copy operation on arbitrary Python objects.

    See the module's __doc__ string for more info.

這些信息還不夠,想看源碼的話只要找到源碼的路徑即可:

>>> print copy.__file__
/usr/local/python27/lib/python2.7/copy.pyc

可以看到如果文件名以.pyc結尾,只要查看對應的以.py結尾的文件即可。

3 _ _all__變量的意義

>>> copy.__all__
['Error', 'copy', 'deepcopy']

可以看到返回一個copy模塊內部設定好的列表,它定義了模塊的公有接口,更準確的說,它告訴解釋器從模塊導入所有名字代表什麼含義,因此如果你使用如下代碼:

from copy import *

那麼你就能使用 all變量中的四個函數,而其它的就被無情地過濾掉了。可以看出這個變量很有意義,當然,如果有的模塊沒有定義它,那麼如果用import *來導入的話將會導入所有不以下劃線開頭的全局名稱。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章