国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

深入Python模塊的使用

2019-11-14 17:10:36
字體:
來源:轉載
供稿:網友

1. 模塊的導入

import file_name可以導入當前目錄上file_name.py這個模塊,但是里面的內容,必須通過file_name.func/file_name.var 來訪問。
另外一種導入方式為import func/var from file_name。這樣func/var直接可用,但是file_name是沒有定義的。
從file_name中導入所有:import * from file_name。這樣會導入所有除了以下劃線開頭的命名。實際代碼中這樣做往往是不被鼓勵的。

如果你一直在某個環境,比如解釋器下面,你已經導入過某個模塊 ,現在你對模塊進行了修改,這里你需要用reload(modulename)來重新載入。

模塊中的主函數:

if __name__ == "__main__":    import sys    fib(int(sys.argv[1]))

2. 模塊的搜索路徑

首先會搜索解析器的當前目錄。然后會到sys.path變量中給出的目錄列表中查找。

>>> import sys>>> sys.path['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
  1. 輸入腳 本的目錄(當前目錄)
  2. 環境變量PYTHONPATH表示的目錄列表中搜索
  3. Ptyon的默認安裝路徑中搜索。

3. 內置模塊

dir()函數返回模塊內的所有定義,無參數時,dir()返回當前解釋器中定義的命名。

>>> import fibo>>> dir(fibo)['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib', 'fib2']>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'fibo']

dir()并不會列出內置函數和變量名。如果你想列出這些內容,它們在標準模塊__builtin__中定義。

4. 包

當不同作的模塊進行按文件夾分類后再組成一個整體的庫,可以稱為包。

sound/                          Top-level package      __init__.py               Initialize the sound package      formats/                  Subpackage for file format conversions              __init__.py              wavread.py              wavwrite.py              aiffread.py              aiffwrite.py              auread.py              auwrite.py              ...      effects/                  Subpackage for sound effects              __init__.py              echo.py              surround.py              reverse.py              ...      filters/                  Subpackage for filters              __init__.py              equalizer.py              vocoder.py              karaoke.py              ...

為了讓Python將目錄當做內容包,目錄中必須包含__init__.py文件。最簡單的情況下,只需要一個空的__init__.py文件即可。

包有兩種導入模塊或模塊內函數的/變量的方式:

from package import item  # 這種方式,item可以是包中的一個子模塊或子包,也可以是包中定義的其他命名,像函數、類、變量。import item.subitem.subsubitem # 這些子項必須是包,最后的子項是包或模塊。但不能為函數、類或變量。

5. 從 * 導入包

那么當用戶寫下 from sound.Effects import * 時會發生什么事?理想中,總是希望在文件系統中找出包中所有的子模塊,然后導入它們。這可能會花掉委有長時間,并且出現期待之外的邊界效應,導出了希望只能顯式導入的包。

對于包的作者來說唯一的解決方案就是給提供一個明確的包索引。import 語句按如下條件進行轉換:執行 from package import *時,如果包中的__init__.py 代碼定義了一個名為 __all__ 的列表,就會按照列表中給出的模塊名進行導入。新版本的包發布時作者可以任意更新這個列表。如果包作者不想 import * 的時候導入他們的包中所有模塊,那么也可能會決定不支持它( import * )。例如, sounds/effects/__init__.py 這個文件可能包括如下代碼:

__all__ = ["echo", "surround", "reverse"]

這意味著 from Sound.Effects import * 語句會從 sound 包中導入以上三個已命名的子模塊。

如果沒有定義 __all__from Sound.Effects import * 語句 不會 從 sound.effects 包中導入所有的子模塊。無論包中定義多少命名,只能確定的是導入了 sound.effects 包(可能會運行__init__.py 中的初始化代碼)以及包中定義的所有命名會隨之導入。這樣就從__init__.py 中導入了每一個命名(以及明確導入的子模塊)。同樣也包括了前述的 import 語句從包中明確導入的子模塊,考慮以下代碼:

import sound.effects.echoimport sound.effects.surroundfrom sound.effects import *

在這個例子中,echo 和 surround 模塊導入了當前的命名空間,這是因為執行 from...import 語句時它們已經定義在 sound.effects 包中了(定義了 __all__時也會同樣工作)。

盡管某些模塊設計為使用 import * 時它只導出符全某種模式的命名,仍然不建議在生產代碼中使用這種寫法。

記住,from Package import specific_submodule 沒有錯誤!事實上,除非導入的模塊需要使用其它包中的同名子模塊,否則這是推薦的寫法。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁蒗| 鄄城县| 图们市| 常宁市| 兴义市| 稻城县| 新野县| 达尔| 南和县| 金寨县| 新巴尔虎左旗| 阿鲁科尔沁旗| 崇礼县| 涿州市| 新龙县| 城口县| 政和县| 鲜城| 榕江县| 健康| 肇源县| 五家渠市| 南阳市| 马关县| 大名县| 偃师市| 思南县| 葫芦岛市| 都安| 莱芜市| 双城市| 左贡县| 襄城县| 光山县| 丹巴县| 阜阳市| 横山县| 赣榆县| 垫江县| 遵义市| 九龙城区|