CodeGym /課程 /Python SELF TW /導入模組

導入模組

Python SELF TW
等級 19, 課堂 0
開放

1.1 認識模組

在 Python 中,模組是 帶有 .py 擴展名的檔案,包含代碼。模組允許將大型代碼劃分為較小的、可管理的部分。每個模組可以包含函數、類別和變量,並在導入時執行某些代碼。

簡單模組的例子

創建一個模組 mymodule.py:


# mymodule.py

def greet(name):
    return f"Hello, {name}!"
            
pi = 3.14159
        

現在這個模組可以在其他檔案中導入和使用。

1.2 導入模組

Python 提供了幾種導入模組的方法。讓我們逐一來看看。

導入整個模組

這種操作的一般語法如下:


import 模組

這種方法會導入整個模組,並且可以通過指定模組名來使用其函數和變量。


import 模組

print(模組.greet("Alice"))  # 輸出: Hello, Alice!
print(模組.pi)  # 輸出: 3.14159
        

我們之前用 math 模組做過類似事情,還記得嗎?


import math

print(math.ceil(13 / 7))  # 向上取整
print(math.floor(13 / 7))  # 向下取整
        

從模組中導入特定元素

可以選擇性地從模組中導入某些元素。這種操作的一般語法如下:


from 模組 import func, var

這種方法只導入模組中的某些特定函數、類別或變量,可以不指定模組名直接使用它們。


from mymodule import greet, pi

print(greet("Bob"))  # 輸出: Hello, Bob!
print(pi)  # 輸出: 3.14159
        

以別名導入模組

這種操作的一般語法如下:


import 模組 as alias

這種方法允許導入模組並賦予它另一個名稱,對於縮短冗長的模組名稱或解析名稱衝突很有用。


import mymodule as mm

print(mm.greet("Charlie"))  # 輸出: Hello, Charlie!
print(mm.pi)  # 輸出: 3.14159
        

導入模組中的所有元素

這種操作的一般語法如下:


from 模組 import *

這種方法會導入模組中的所有函數、類別和變量,可以不指定模組名直接使用它們。但是,不建議使用這種方法,因為它可能會引起名稱衝突,並使代碼難以閱讀。


from mymodule import *

print(greet("Dave"))  # 輸出: Hello, Dave!
print(pi)  # 輸出: 3.14159
        

1.3 導入過程的底層細節

模組搜索順序

當你導入一個模組時,Python 按照特定的順序搜索它:

  1. 當前目錄: Python 首先在當前目錄搜索模組,這是執行腳本的目錄。
  2. 環境變數 PYTHONPATH: 如果在當前目錄找不到模組,Python 會在 PYTHONPATH 指定的目錄中搜索它。
  3. 標準目錄: 如果模組仍然找不到,Python 會在標準目錄(如 sys.path 指定的目錄)中搜索它。

例子:


import sys

for path in sys.path:
    print(path)
        

局部與全局導入

可以在全局級別(檔案開頭)或局部級別(函數或方法內)導入模組。

全局導入

全局導入在檔案開頭執行,使導入的模組可在整個檔案中使用。


import math

def calculate_circle_area(radius):
    return math.pi * radius ** 2
        

局部導入

局部導入在函數或方法內執行,使導入的模組僅在該函數或方法中可用。


def calculate_square_root(x):
    import math
    return math.sqrt(x)
    
print(calculate_square_root(16))
        

局部導入可能有助於減少模組加載時間或防止名稱衝突。

1.4 動態導入

動態導入允許在程序運行時導入模組。這在基於用戶輸入或其他動態條件需要導入模組時很有用。

這種操作的一般語法如下:


module = __import__("模組")

讓我們以此方式導入 math 模組作為例子。


module_name = "math"
module = __import__(module_name)
print(module.sqrt(16))  # 輸出: 4.0

後續的代碼操作類似於使用 import as,將 math 模組賦予別名 module。

1.5 使用 getattr 函數訪問模組屬性

getattr 函數允許動態獲取模組(或任何對象)中的屬性。當屬性的名稱在程序運行時未知或可能發生變化時,這非常有用。

getattr 函數的語法:


getattr(object, name, default = None)

其中 object 是要獲取屬性的對象,name 是包含屬性名稱的字符串,default 是當指定名稱的屬性不存在時返回的值。參數 default 的默認值為 None。

使用 getattr 函數的例子:


import math

# 從 math 模組獲取 sqrt 屬性
sqrt_function = getattr(math, 'sqrt')

print(sqrt_function(25))  # 輸出: 5.0

# 嘗試獲取不存在的屬性,返回默認值
non_existent_attr = getattr(math, 'non_existent', 'default_value')

print(non_existent_attr)  # 輸出: default_value
        

在這個例子中,我們使用 getattr 函數從 math 模組中獲取 sqrt 函數,然後調用該函數計算數字 25 的平方根。如果指定名稱的屬性不存在,則返回默認值 default_value。

2
任務
Python SELF TW, 等級 19, 課堂 0
上鎖
從模組導入元素
從模組導入元素
2
任務
Python SELF TW, 等級 19, 課堂 0
上鎖
動態導入模組
動態導入模組
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION