https://data-flair.training/blogs/python-modules/
什麼是 Python Modules?
內含 Python 程式/statements和定義/definitions 的檔案。
如 calc.py:
def add(a,b):
return a+b
def sub(a,b):
return a-b
def mul(a,b):
return a*b
def div(a,b):
return a/b
def exp(a,b):
return a**b
def floordiv(a,b):
return a+b
def sub(a,b):
return a-b
def mul(a,b):
return a*b
def div(a,b):
return a/b
def exp(a,b):
return a**b
def floordiv(a,b):
return a//b
匯入模組
如此一來同目錄下的 PythonPackagesDemo.py 可以如下方式呼叫:
import calc #或是 from calc import *
sum=calc.add(1,2)
print(sum)
每個 module 會建立各自的 private symbol table,避免模組間的名稱衝突。
也可選擇性地匯入某些函式:
from calc import div as d, floordiv as fd
x= d(120,7)
print(x) #17.142857142857142
y=fd(120,7)
print(y) #17
Python Module Search Path
對於 import 的 module,Python interpreter 會依如下順序搜:
- 有沒有內建版本 ?
- 去 sys.path 目錄下找。 sys.path 是一個變數,初始值來自:
- 目前 Python 程式所在目錄
- PYTHONPATH 目錄清單,就像 shell 下的 PATH 變數。
- 預設安裝目錄 (installation-dependent default)
- 就算初始化,Python 程式也可修改 sys.path。
Compiled Python Files
若要加速,Python 可以把編譯過的 module快取在 __pycache__ 目錄,命名方式: module.version.pyc,區分不同 Python 版本。
如:在 CPython 3.3 版本,eggs.py 快取版的名字為 __pycache__/eggs.cpython-33.pyc.
編譯版會 platform-independent,若版本過期,Python 會自動重新編譯。
Python Standard Modules
Python 本身有 modules,有些內建在 interpreter 如 sys,有些只有在某些執行環境可用(如winreg 只在 Windows 上),我們也可以建立。如下可列出所有 sys 模組:
import sys
sys.version
# '3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)]'
for i in dir(sys): print(i)
'''
__breakpointhook__
__displayhook__
__doc__
略...
'''
沒有留言:
張貼留言