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 process模組Python
- python shutil模組簡單介紹Python
- Python 關於JSON模組介紹PythonJSON
- python之pymsql模組相關介紹PythonSQL
- Python的常見模組:OS和 time模組介紹Python
- python模組介紹- bisect模組維護有序列表Python
- Python的包(package)和模組(module)介紹PythonPackage
- Python3 日曆(Calendar)模組介紹Python
- Python標準庫系列之模組介紹Python
- #PYTHON# os以及os.path模組介紹Python
- python模組介紹- textwrap 文字包裝和填充Python
- TSM功能模組介紹
- python基礎之-sys模組、os模組基本介紹(未完成)Python
- 【StoneDB 模組介紹】伺服器模組伺服器
- Python之logging模組相關介紹Python
- ModStartCMS模組開發介紹
- 3.03 模組外掛介紹
- nodejs主要模組介紹NodeJS
- Tengine 常用模組使用介紹
- Python中爬蟲模組有哪些?優缺點介紹!Python爬蟲
- Python3常用網路程式設計模組介紹Python程式設計
- Android模組化框架介紹Android框架
- nodejs常用核心模組介紹NodeJS
- python3中的re模組簡單介紹及使用Python
- Nginx 架構——【核心流程+模組介紹】Nginx架構
- Django重要元件之Auth模組介紹Django元件
- mysql SQL Layer各個模組介紹MySql
- Python-VidGear模組翻譯系列-01-Introduction介紹Python
- Python前景介紹Python
- Python Twisted 介紹Python
- Python字典介紹Python
- Python Virtualenv 介紹Python
- Python 框架介紹Python框架
- GoldenGate 12.3 MA架構介紹系列(3) - 各功能模組介紹Go架構
- Istio所有模組、Service、Pod的功能介紹
- Altair Simdroid 流體分析模組介紹AI
- Python簡單介紹Python
- python類的介紹Python