最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析python如何使用Literal限制函數(shù)參數(shù)的取值范圍

 更新時間:2026年01月04日 09:27:10   作者:鄭泰科技  
Literal 是 Python 類型提示(Type Hint)中的核心工具,用于嚴(yán)格限制變量 / 函數(shù)參數(shù)只能取指定的字面量值,以下是完整的使用方法和示例,感興趣的小伙伴可以了解下

Literal 是 Python 類型提示(Type Hint)中的核心工具,用于嚴(yán)格限制變量 / 函數(shù)參數(shù)只能取指定的字面量值,結(jié)合靜態(tài)類型檢查工具(如 mypy)可提前攔截非法值傳入,大幅提升代碼健壯性。以下是完整的使用方法和示例:

一、基礎(chǔ)使用步驟

環(huán)境準(zhǔn)備

  • Python 3.8+:Literal 首次內(nèi)置在 typing 模塊中;
  • Python 3.7 及以下:需安裝 typing_extensions 庫(pip install typing-extensions),從 typing_extensions 導(dǎo)入;
  • 靜態(tài)檢查工具(可選但推薦):安裝 mypy(pip install mypy),用于校驗類型合規(guī)性。

核心語法

Python 3.8+

from typing import Literal

Python 3.7-

from typing_extensions import Literal

def 函數(shù)名(參數(shù)名: Literal[值1, 值2, 值3, …]) -> 返回值類型:

函數(shù)邏輯

二、實戰(zhàn)示例

示例 1:限制字符串字面量

限制函數(shù)參數(shù)只能取 “success”/“failure”/“pending” 三個值:

from typing import Literal

def print_task_status(status: Literal["success", "failure", "pending"]) -> None:
    """打印任務(wù)狀態(tài),僅接受指定的3個值"""
    print(f"Task status: {status}")

合法調(diào)用(符合字面量限制)

print_task_status(“success”)
print_task_status(“pending”)

非法調(diào)用(超出字面量范圍,靜態(tài)檢查工具會報錯)

print_task_status("error")  # mypy 提示:Argument 1 to "print_task_status" has incompatible type "Literal['error']"; expected "Literal['success', 'failure', 'pending']"

示例 2:限制數(shù)值字面量

限制參數(shù)只能取 1/2/3(比如代表日志級別):

from typing import Literal

def set_log_level(level: Literal[1, 2, 3]) -> None:
    """設(shè)置日志級別:1=DEBUG,2=INFO,3=ERROR"""
    level_map = {1: "DEBUG", 2: "INFO", 3: "ERROR"}
    print(f"Log level set to: {level_map[level]}")

合法調(diào)用

set_log_level(2)

非法調(diào)用(mypy 報錯)

set_log_level(4) # 超出 1/2/3 范圍

示例 3:混合類型字面量(慎用)

Literal 支持不同類型的字面量混合(但不推薦,易增加代碼復(fù)雜度):

from typing import Literal

def get_config(key: Literal["timeout", "retry", 5]) -> str:
    """獲取配置,key 僅支持指定字符串/數(shù)值"""
    config = {"timeout": "10s", "retry": "3次", 5: "特殊配置"}
    return config[key]

合法調(diào)用

get_config(“timeout”)
get_config(5)

非法調(diào)用

get_config(6) # mypy 報錯

示例 4:結(jié)合類型別名(簡化復(fù)雜字面量)

如果字面量列表較長,可通過 TypeAlias 定義別名,提升代碼可讀性:

from typing import Literal, TypeAlias

#定義類型別名:限制僅支持這4種HTTP方法
HTTPMethod: TypeAlias = Literal["GET", "POST", "PUT", "DELETE"]

def send_request(url: str, method: HTTPMethod) -> None:
    """發(fā)送HTTP請求,method 僅支持指定方法"""
    print(f"Send {method} request to {url}")

合法調(diào)用

send_request(“https://example.com”, “GET”)

非法調(diào)用

send_request(“https://example.com”, “PATCH”) # mypy 報錯

三、關(guān)鍵注意事項

1.運行時校驗(重要)

Literal 僅作用于靜態(tài)類型檢查(如 mypy),不會自動攔截運行時的非法值!如果需要運行時校驗,需手動添加邏輯:

from typing import Literal

def print_status(status: Literal["success", "failure", "pending"]) -> None:
    # 運行時校驗(兜底)
    valid_status = {"success", "failure", "pending"}
    if status not in valid_status:
        raise ValueError(f"Invalid status: {status}. Must be one of {valid_status}")
    print(status)
#運行時觸發(fā)報錯
print_status("error")  # ValueError: Invalid status: error. Must be one of {'success', 'failure', 'pending'}

2.版本兼容

  • Python 3.8+:直接從 typing 導(dǎo)入 Literal;
  • Python 3.7 及以下:需安裝 typing_extensions,并從該庫導(dǎo)入:
#Python 3.7-
from typing_extensions import Literal

3.配合靜態(tài)檢查工具

編寫代碼后,通過 mypy 校驗類型

檢查當(dāng)前文件(假設(shè)文件名為 test.py)

mypy test.py

若存在非法參數(shù)傳入,mypy 會輸出明確的錯誤提示,提前發(fā)現(xiàn)問題。

四、應(yīng)用場景

  • 配置項限制:如環(huán)境(dev/test/prod)、日志級別(DEBUG/INFO/ERROR);
  • 接口參數(shù)限制:如 HTTP 方法、數(shù)據(jù)庫操作類型(read/write);
  • 狀態(tài)機限制:如任務(wù)狀態(tài)(pending/running/finished)。

通過 Literal 限制參數(shù)范圍,既能讓代碼意圖更清晰,也能借助工具提前規(guī)避非法值傳入的問題,是 Python 類型提示中提升代碼可靠性的重要手段。

到此這篇關(guān)于淺析python如何使用Literal類型來限制函數(shù)參數(shù)的取值范圍的文章就介紹到這了,更多相關(guān)python Literal類型限制函數(shù)參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用jupyter?notebook保存python代碼為.py格式問題

    使用jupyter?notebook保存python代碼為.py格式問題

    這篇文章主要介紹了使用jupyter?notebook保存python代碼為.py格式問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Python實現(xiàn)XML文件解析的示例代碼

    Python實現(xiàn)XML文件解析的示例代碼

    本篇文章主要介紹了Python實現(xiàn)XML文件解析的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Python獲取列表值的方法小結(jié)

    Python獲取列表值的方法小結(jié)

    在?Python?編程中,列表(list)是一種非常常見且強大的數(shù)據(jù)結(jié)構(gòu),本文將通過簡潔明了的方式,結(jié)合代碼和案例,介紹如何獲取列表中的值,需要的可以了解下
    2024-11-11
  • Python中pass的作用與使用教程

    Python中pass的作用與使用教程

    這篇文章主要給大家介紹了關(guān)于Python中pass的作用與使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python3 pyecharts 模塊數(shù)據(jù)可視化的高效利器(實戰(zhàn)案例)

    Python3 pyecharts 模塊數(shù)據(jù)可視化的高效利器(實戰(zhàn)案例)

    pyecharts作為Python 生態(tài)中一款優(yōu)秀的數(shù)據(jù)可視化庫,以其簡潔的 API 設(shè)計、豐富的圖表類型和良好的交互性,成為開發(fā)者快速實現(xiàn)數(shù)據(jù)可視化的首選工具之一,本文將從核心特性、基礎(chǔ)使用流程、高級功能及實戰(zhàn)案例等方面,全面解析pyecharts,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • python標(biāo)準(zhǔn)庫之time模塊的語法與簡單使用

    python標(biāo)準(zhǔn)庫之time模塊的語法與簡單使用

    在平常的代碼中,我們常常需要與時間打交道,那么在Python中,與時間處理有關(guān)的模塊就包括:time、datetime以及calendar,這篇文章主要給大家介紹了關(guān)于python標(biāo)準(zhǔn)庫之time模塊的語法與使用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Python中的random.uniform()函數(shù)教程與實例解析

    Python中的random.uniform()函數(shù)教程與實例解析

    今天小編就為大家分享一篇關(guān)于Python中的random.uniform()函數(shù)教程與實例解析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 利用python將xml文件解析成html文件的實現(xiàn)方法

    利用python將xml文件解析成html文件的實現(xiàn)方法

    下面小編就為大家分享一篇利用python將xml文件解析成html文件的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Python算法之棧(stack)的實現(xiàn)

    Python算法之棧(stack)的實現(xiàn)

    這篇文章主要介紹了Python算法之棧(stack)的實現(xiàn),非常實用,需要的朋友可以參考下
    2014-08-08
  • Python中的集合類型知識講解

    Python中的集合類型知識講解

    這篇文章主要介紹了Python中的集合類型知識講解,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08

最新評論

许昌县| 平安县| 小金县| 琼结县| 清徐县| 彩票| 东城区| 屏东县| 昌吉市| 海城市| 寿光市| 兰考县| 根河市| 婺源县| 美姑县| 凉山| 新疆| 南木林县| 海伦市| 郴州市| 长沙县| 吉首市| 罗平县| 思南县| 崇仁县| 涞水县| 西和县| 台北市| 镇坪县| 耿马| 桂林市| 大冶市| 安西县| 邻水| 循化| 延庆县| 衡东县| 玛多县| 赣州市| 图木舒克市| 彝良县|