更新於 2024/03/04閱讀時間約 5 分鐘

[Python][微進階]型別提示 type hint

在程式開發中,協作合作專案時,利用type hint,可以快速知道函式輸入及輸出的資料型別在後續的維護時也會更加方便及可讀

Type hintsPython 3.5 版本引入的功能,它允許在函數宣告中指定參數和傳回值的類型。Type hints 是一種可選的註解形式,不會影響程式碼的運行,但可以提供給IDE靜態類型檢查工具其他開發者更多的信息,以提高程式碼可讀性可維護性


基本的Python Type hints 範例:

在函式參數和傳回值中使用Type hints:

基本數值型態:

def add_numbers(x: int, y: float) -> float:
return x + y

在這個例子中,x 是一個整數,y 是一個浮點數,而函式的傳回類型被註釋為 float

字串型態:

def merge_strings(str1: str, str2: str) -> str:
return str1 + str2

在這個例子中,str1str2 都是字串,而函數的傳回類型也是字串。

布林型態:

def is_positive(number: int) -> bool:
return number > 0

在這個例子中,number 是一個整數,而函數的傳回類型被註釋為 bool

使用 Any 作為函數參數或返回值的型別:

在型別提示(Type hint)中,Any 是一個特殊的型別,表示任意類型。

當你不確定一個變數的確切型別時,可以使用 Any。但要注意,使用 Any 會失去靜態型別檢查的優勢。

from typing import Any

def process_data(data: Any) -> Any:
# 執行一些處理操作
return data

result: Any = process_data("Hello, World!")
print(result)

在這個例子中,data: Any 表示 process_data 函數的參數 data 可以是任意型別,而 -> Any 表示該函數返回的結果也可以是任意型別。


使用 -> None 來表示一個函數沒有返回任何值:

使用 -> None 的情況通常包括:

  • 函式的主要目的是通過副作用改變程式狀態,而不是返回值。
  • 函式執行某些操作,但這些操作的結果不需要返回。
def log_message(message: str) -> None:
# 將消息記錄到日誌或執行其他操作
print(f"Log: {message}")

# 呼叫函數
log_message("This is a log message")

在這個例子中,-> None 表示 log_message 函式不會返回任何值,即它是一個沒有返回值的函式。


Python 3.9 以下

列表型態:

使用 typing 模組的 List 進行表達:

from typing import List

def process_numbers(numbers: List[int]) -> List[float]:
return [float(num) for num in numbers]

在這個例子中,numbers 是一個整數列表,而函數的傳回類型是一個浮點數列表。

字典型態:

使用 typing 模組的 Dict進行表達:

from typing import Dict

def create_person(name: str, age: int) -> Dict[str, Union[str, int]]:
return {'name': name, 'age': age}

在這個例子中,create_person 函數的傳回類型是一個包含字串鍵和混合字串、整數值的字典。

元組型態:

使用 typing 模組的 Tuple進行表達:

from typing import Tuple

def split_name(full_name: str) -> Tuple[str, str]:
first, last = full_name.split()
return first, last

這個例子中,split_name 函數的傳回類型是一個包含兩個字串的元組。

這些 Type hints 可以在開發過程中提供更多的資訊。


可以使用 NumPy 提供的 ndarray 類型進行型別註釋ndarrayNumPy 中用於表示多維數組的類型。

NumPy 的 ndarray 進行型別註釋的例子:

import numpy as np

def process_array(arr: np.ndarray) -> np.ndarray:
result = arr * 2
return result

# 創建一個 NumPy 數組
input_array = np.array([1, 2, 3])

# 呼叫函數
output_array = process_array(input_array)

print(output_array)

在這個例子中,arr: np.ndarray 表示 process_array 函數的參數 arr 的型別是 NumPy 的 ndarray

同樣地,-> np.ndarray 表示該函數將返回一個 NumPy 的 ndarray

使用 np.ndarray 這樣的型別提示可以讓代碼更清晰地表達預期的數據結構


參考文獻






分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.