2022年4月21日 星期四

Python Modules

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

匯入模組

如此一來同目錄下的 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 會依如下順序搜:

  1. 有沒有內建版本 ?
  2. 去 sys.path 目錄下找。 sys.path 是一個變數,初始值來自:
    1. 目前 Python 程式所在目錄
    2. PYTHONPATH 目錄清單,就像 shell 下的 PATH 變數。
    3. 預設安裝目錄 (installation-dependent default)
    4. 就算初始化,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__
略...
'''


沒有留言:

張貼留言