Python模組介紹
模組
匯入模組
Python官方教程讓我們在Python直譯器中練習。但是當我們結束直譯器,所有的程式碼都消失了。如果我們希望讓程式碼永久儲存的話,就需要將它們儲存到檔案中。每一個以.py
結尾的檔案,都是一個Python模組。我們可以在程式碼中使用import
關鍵字匯入其他模組。
print(`--------------匯入模組--------------`)
import sys
print(f`{sys.path}`)
匯入模組之後,我們就可以使用該模組中的所有函式了,就像上面那樣。不過這種方式,每次都需要新增模組名和點號。有沒有什麼方法可以向Java的靜態匯入那樣,直接使用函式而不需要模組名呢?當然也是可行的,不過這需要下面的匯入方式。
from io import *
這種方式雖然簡單,但是要注意適當使用。因為有些函式可能出現重名。所以最好的辦法還是使用第一種,當然如果你的程式碼很小,確認沒重名,那麼使用哪種方法都可以。
執行模組
有時候我們不僅需要匯入一個模組的函式,還需要執行一個模組中的程式碼。執行程式碼可以使用下面的命令。
python 檔名.py <引數>
預設情況下,當我們匯入一個模組的時候,它的程式碼就會自動執行。如果我們需要將匯入和執行分隔開,不想在匯入的時候執行模組,就需要在模組中新增類似下面的程式碼。
if __name__ == "__main__":
# ....
這裡用到了另一個內建變數__name__
。當前執行的檔案的__name__
的值是__main__
,匯入的檔案的__name__
是模組的名稱。所以我們可以使用該變數來判斷模組是被匯入的,還是被執行的。
模組的查詢
模組的查詢路徑如下:
- 包含當前輸入檔案的資料夾(如果沒有就是直譯器的當前資料夾)。
-
PYTHONPATH
變數(和系統環境變數PATH語法相同)、 - Python安裝資料夾。
具體說來我們可以使用sys
模組的path()
方法獲取模組資料夾。
import sys
print(f`{sys.path}`)
在我電腦上輸出如下。
[`D:\Desktop\python-study\python-samples`, `D:\Desktop\python-study\python-samples`, `C:\Python36\python36.zip`, `C:\Python36\DLLs`, `C:\Python36\lib`, `C:\Python36`, `C:\Python36\lib\site-packages`]
dir內建函式
我們都知道在windows命令提示符下輸入dir
就會列出當前資料夾資訊,類似Linux中的ls
。在Python中也有一個內建函式dir()
,它會返回給定模組下定義的所有名稱。如果沒指定引數,那麼dir()
函式會返回當前模組下的所有名稱。
包
定義包
包是一種組織模組的方式。相信你在Java或者其他語言中也已經瞭解過包的作用了。Python官方教程為我們列舉了一個典型的包結構。可以看到,包和一般的資料夾沒什麼區別,關鍵是包資料夾下必須包含一個__init__.py
,表明這是一個包。
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
...
匯入包
定義了包之後,我們就可以匯入包了。語法和匯入模組類似,不過這次我們需要制定完整包名了。
import sound.effects.echo
當然匯入之後使用的時候也需要制定完整包名。
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
如果嫌麻煩也可以將包內容直接匯入到當前名字空間下。這樣以後使用的時候就不需要寫整個包名了。
from sound.effects import echo
在Python中匯入包、子包、模組的語法完全相同。所以我們可以僅把最末尾的子包直接匯入到當前名字空間下,這樣一方面節省了書寫成本,名字衝突的風險也不會太大。
包匯入控制
如果我們使用from sound.effects import *
將所有模組都匯入,會發生什麼事情呢?這樣會將該包下的所有子包的所有模組都匯入。如果包比較大的話就會出現效能問題。所以一般我們都需要對一次性匯入的模組進行控制。
方法也很簡單,在包的__init__.py
檔案中,操作__all__
變數。在__all__
變數中,指定要匯入的包。這樣以後就算使用萬用字元一次性匯入所有模組,也只會匯入這裡定義的模組。
__all__ = ["echo", "surround", "reverse"]
相關文章
- Python 關於JSON模組介紹PythonJSON
- 簡單介紹python process模組Python
- Python的常見模組:OS和 time模組介紹Python
- Python之logging模組相關介紹Python
- python之pymsql模組相關介紹PythonSQL
- Python3 日曆(Calendar)模組介紹Python
- Python的包(package)和模組(module)介紹PythonPackage
- python基礎之-sys模組、os模組基本介紹(未完成)Python
- 【StoneDB 模組介紹】伺服器模組伺服器
- 3.03 模組外掛介紹
- Android模組化框架介紹Android框架
- ModStartCMS模組開發介紹
- Python 位元組碼介紹Python
- Python中爬蟲模組有哪些?優缺點介紹!Python爬蟲
- Python-VidGear模組翻譯系列-01-Introduction介紹Python
- python3中的re模組簡單介紹及使用Python
- Nginx 架構——【核心流程+模組介紹】Nginx架構
- mysql SQL Layer各個模組介紹MySql
- Django重要元件之Auth模組介紹Django元件
- Altair Simdroid 流體分析模組介紹AI
- 『無為則無心』Python日誌 — 64、Python日誌模組logging介紹Python
- Simulink模擬---自帶PMSM電機模組介紹
- Istio所有模組、Service、Pod的功能介紹
- node表格模組exceljs介紹1–基本使用ExcelJS
- Python數模筆記-Sklearn(1) 介紹Python筆記
- MT7628 wifi(路由器)模組晶片組介紹WiFi路由器晶片
- 接入層Nginx架構及模組介紹分享Nginx架構
- 光模組數字診斷(DDM)功能介紹
- HanLP分類模組的分詞器介紹HanLP分詞
- 日誌篇:模組日誌總體介紹
- Python 精靈模組簡介_python sprites module introducePython
- ASP.NET Core模組化前後端分離快速開發框架介紹之3、資料訪問模組介紹ASP.NET後端框架
- [雪峰磁針石部落格]python標準模組介紹-string:文字常量和模板Python
- python爬蟲:爬蟲的簡單介紹及requests模組的簡單使用Python爬蟲
- TiCDC 原始碼閱讀(二)TiKV CDC 模組介紹原始碼
- python 模組:itsdangerous 模組Python
- Python模組:time模組Python
- 什麼是位元組碼?python位元組碼詳細介紹!Python
- 聯發科MT3339 GPS單晶片模組介紹晶片