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

淺析python如何使用Literal限制函數(shù)參數(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),用于校驗(yàn)類型合規(guī)性。

核心語法

Python 3.8+

from typing import Literal

Python 3.7-

from typing_extensions import Literal

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

函數(shù)邏輯

二、實(shí)戰(zhàn)示例

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

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

from typing import Literal

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

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

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

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

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(比如代表日志級(jí)別):

from typing import Literal

def set_log_level(level: Literal[1, 2, 3]) -> None:
    """設(shè)置日志級(jí)別: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 報(bào)錯(cuò))

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 報(bào)錯(cuò)

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

如果字面量列表較長(zhǎng),可通過 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請(qǐng)求,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 報(bào)錯(cuò)

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

1.運(yùn)行時(shí)校驗(yàn)(重要)

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

from typing import Literal

def print_status(status: Literal["success", "failure", "pending"]) -> None:
    # 運(yùn)行時(shí)校驗(yàn)(兜底)
    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)
#運(yùn)行時(shí)觸發(fā)報(bào)錯(cuò)
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 校驗(yàn)類型

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

mypy test.py

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

四、應(yīng)用場(chǎng)景

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

    Python中pass的作用與使用教程

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

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

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

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

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

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

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

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

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

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

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

    Python中的集合類型知識(shí)講解

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

最新評(píng)論

浦江县| 正定县| 凌源市| 合作市| 南宁市| 五台县| 威信县| 喀喇沁旗| 深水埗区| 安图县| 阳泉市| 东阿县| 建宁县| 石家庄市| 吴川市| 闽清县| 保靖县| 彰化县| 固阳县| 安溪县| 西宁市| 涪陵区| 贵州省| 读书| 左云县| 上高县| 霞浦县| 利津县| 荆州市| 井研县| 正镶白旗| 普兰店市| 车致| 九寨沟县| 泸州市| 米易县| 通城县| 巴彦县| 洮南市| 洱源县| 乾安县|