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

Python 類型注解核心用法指南

 更新時(shí)間:2026年05月09日 10:35:30   作者:勇往直前plus  
本文主要介紹了Python中的類型注解功能,它可以幫助提高代碼的可讀性與維護(hù)性,類型注解可以應(yīng)用于變量、函數(shù)和類,分別提供類型提示而不會(huì)強(qiáng)制類型校驗(yàn),文章同時(shí)也介紹了不同類型注解的用法及存儲(chǔ)機(jī)制,并強(qiáng)調(diào)了使用注解時(shí)需要注意的一些事項(xiàng)

一、前言

  1. 在 Python 開發(fā)中,類型注解是提升代碼可讀性、降低維護(hù)成本的低成本手段——它不影響程序運(yùn)行,卻能讓 IDE 實(shí)現(xiàn)智能補(bǔ)全、讓同事快速理解代碼邏輯,更是 dataclass、Pydantic 等常用框架的核心依賴。
  2. Python 作為動(dòng)態(tài)類型語(yǔ)言,變量、函數(shù)參數(shù)的類型全靠“猜測(cè)”,這會(huì)帶來三個(gè)核心問題:
    • 閱讀成本高:需反復(fù)追溯變量用途,才能理解代碼邏輯;
    • 調(diào)試成本高:傳參類型錯(cuò)誤僅在運(yùn)行時(shí)暴露,排查耗時(shí);
    • 開發(fā)效率低:IDE 無法提供精準(zhǔn)補(bǔ)全,寫代碼全靠記憶。

而類型注解的核心價(jià)值,就是給代碼“打標(biāo)簽”——僅做類型提示,不強(qiáng)制校驗(yàn),卻能解決上述問題。

二、類型注解核心用法

按使用場(chǎng)景可以劃分為變量的類型注解、函數(shù)類型注解、類的類型注解

2.1 變量類型注解

這是最基礎(chǔ)的用法,覆蓋全局變量、函數(shù)內(nèi)局部變量,語(yǔ)法統(tǒng)一且簡(jiǎn)單,重點(diǎn)區(qū)分“有無默認(rèn)值”的差異。

  1. 無默認(rèn)值的注解(如 age: int)僅存元數(shù)據(jù),不會(huì)創(chuàng)建變量,未賦值直接使用會(huì)報(bào)錯(cuò);
  2. 有默認(rèn)值的注解,同時(shí)完成“類型標(biāo)記”和“變量賦值”,變量可正常使用;
  3. 注解不強(qiáng)制類型匹配(如 age: int = “20” 可運(yùn)行),僅起提示作用。
# 無默認(rèn)值(僅標(biāo)記類型,不創(chuàng)建變量)
變量名: 類型
# 有默認(rèn)值(標(biāo)記類型+賦值,注解與變量共存)
變量名: 類型 = 默認(rèn)值
age:int = 19
# 合法:只聲明類型,不賦值
name: str
# 此時(shí)變量還不存在,直接用會(huì)報(bào)錯(cuò)
# print(name)  # NameError
# 賦值后,變量才真正存在
name = "張三"
print(name)  # 正常運(yùn)行

2.2 函數(shù)類型注解

重點(diǎn)標(biāo)注「參數(shù)類型」和「返回值類型」,讓函數(shù)用途、輸入輸出一目了然,減少溝通成本

  1. 無返回值最好寫 -> None,省略會(huì)導(dǎo)致 IDE 提示異常;
  2. *args 注解標(biāo)注“元素類型”(如 *args: int 表示所有可變位置參數(shù)都是整數(shù));
  3. **kwargs 注解標(biāo)注“值的類型”(如 **kwargs: str 表示所有關(guān)鍵字參數(shù)的值為字符串);
# 僅參數(shù)注解
def 函數(shù)名(參數(shù)1: 類型, 參數(shù)2: 類型 = 默認(rèn)值):
    pass
# 參數(shù)+返回值注解(-> 標(biāo)識(shí)返回類型)
def 函數(shù)名(參數(shù)1: 類型, 參數(shù)2: 類型) -> 返回值類型:
    pass
def add(a: int, b: int) -> int:
    return a + b
# 無返回值(必須寫 -> None,不可省略)
def log(msg: str) -> None:
    print(f"日志:{msg}")
# 可變參數(shù)注解(指定內(nèi)部元素類型)
def sum_numbers(*args: int, **kwargs: str) -> list[int]:
    return list(args)

2.3 類的類型注解(dataclass 依賴)

專門用于標(biāo)記「實(shí)例屬性」類型,分三種形態(tài),核心區(qū)分“注解”與“類屬性”的關(guān)系,是 dataclass 框架的核心依賴。

  1. 純注解(如 name: str)不生成類屬性,僅存入 __annotations__,用于標(biāo)記未來實(shí)例的屬性類型;
  2. 注解+默認(rèn)值(如 email: str | None = None),一行完成“類型標(biāo)記+類屬性賦值”;
  3. dataclass 正是通過讀取 __annotations__,自動(dòng)生成 __init__、__repr__ 等方法,無需手動(dòng)編寫;
  4. 實(shí)例化后,注解標(biāo)記的屬性會(huì)成為實(shí)例屬性,優(yōu)先覆蓋同名類屬性。
class 類名:
    # 1. 純注解(僅標(biāo)記實(shí)例屬性類型,無類屬性)
    屬性名1: 類型
    # 2. 注解+默認(rèn)值(標(biāo)記類型+創(chuàng)建類屬性,供實(shí)例繼承默認(rèn)值)
    屬性名2: 類型 = 默認(rèn)值
    # 3. 普通類屬性(無注解,不進(jìn)入__annotations__)
    屬性名3 = 默認(rèn)值
class User:
    # 純注解:僅標(biāo)記實(shí)例屬性類型,無類屬性
    name: str
    age: int
    # 注解+默認(rèn)值:有類型標(biāo)記,同時(shí)創(chuàng)建類屬性(默認(rèn)值)
    email: str | None = None  # 實(shí)例可覆蓋該默認(rèn)值
    gender: str = "未知"
    # 普通類屬性:無注解,不進(jìn)入__annotations__,所有實(shí)例共享
    address = "北京"
# 驗(yàn)證注解存儲(chǔ)(僅包含帶注解的屬性)
print(User.__annotations__)
# 輸出:{'name': str, 'age': int, 'email': str | None, 'gender': str}

三、類型注解元數(shù)據(jù)的存儲(chǔ)機(jī)制

Python 會(huì)自動(dòng)將所有類型注解收集到特殊的 __annotations__ 字典中,本質(zhì)是一個(gè)普通字典,鍵為注解標(biāo)記的對(duì)象名稱(變量名、函數(shù)參數(shù)名、類屬性名等),值為對(duì)應(yīng)的類型(如 str、int、list[int] 等),供框架、工具讀取使用。

3.1 不同場(chǎng)景下的元數(shù)據(jù)存儲(chǔ)

注解元數(shù)據(jù)的存儲(chǔ)位置,隨注解場(chǎng)景(變量、函數(shù)、類)不同而有所差異

模塊級(jí)變量注解存儲(chǔ)

全局(模塊級(jí))變量的注解,會(huì)存儲(chǔ)在當(dāng)前模塊對(duì)象的 annotations 字典中

# 模塊級(jí)變量注解
name: str = "張三"
age: int = 20
score: float | None = 95.5
# 查看模塊級(jí)注解元數(shù)據(jù)
print(__annotations__)
# 輸出:{'name': str, 'age': int, 'score': float | None}

函數(shù)注解存儲(chǔ)

函數(shù)的注解(參數(shù)注解、返回值注解),會(huì)存儲(chǔ)在函數(shù)對(duì)象的 annotations 字典中,同時(shí)返回值注解會(huì)單獨(dú)對(duì)應(yīng)鍵 “return”,參數(shù)注解對(duì)應(yīng)各自的參數(shù)名

def add(a: int, b: int) -> int:
    return a + b
# 查看函數(shù)注解元數(shù)據(jù)
print(add.__annotations__)
# 輸出:{'a': int, 'b': int, 'return': int}
# 可變參數(shù)注解的存儲(chǔ)
def sum_numbers(*args: int, **kwargs: str) -> list[int]:
    return list(args)
print(sum_numbers.__annotations__)
# 輸出:{'args': int, 'kwargs': str, 'return': list[int]}

類注解存儲(chǔ)

類內(nèi)的屬性注解(純注解、注解+默認(rèn)值),會(huì)存儲(chǔ)在類對(duì)象的 annotations 字典中(普通類屬性無注解,不存入);實(shí)例對(duì)象本身沒有 annotations,其注解信息繼承自所屬類。

class User:
    name: str  # 純注解
    age: int   # 純注解
    email: str | None = None  # 注解+默認(rèn)值
    gender: str = "未知"       # 注解+默認(rèn)值
    address = "北京"          # 無注解,不存入
# 查看類的注解元數(shù)據(jù)
print(User.__annotations__)
# 輸出:{'name': str, 'age': int, 'email': str | None, 'gender': str}
# 實(shí)例無__annotations__,繼承類的注解信息
u = User()
print(hasattr(u, "__annotations__"))  # 輸出:False

3.2 關(guān)鍵注意點(diǎn)

  • __annotations__ 是動(dòng)態(tài)可變的:可手動(dòng)修改該字典,修改后會(huì)影響框架、工具對(duì)注解的讀?。ú煌扑]手動(dòng)修改,易造成混亂);
  • 無默認(rèn)值的變量注解,僅存入 __annotations__,不創(chuàng)建變量(如 age: int 僅在 __annotations__ 中有記錄,未賦值則變量不存在);
  • 框架依賴:dataclass、Pydantic 等框架,核心就是通過讀取 __annotations__ 字典,實(shí)現(xiàn)屬性校驗(yàn)、自動(dòng)生成方法等功能。

四、常用類型簡(jiǎn)寫

類型場(chǎng)景注解寫法(3.10+)說明
基礎(chǔ)類型int/str/bool/float/None最常用、最基礎(chǔ)的類型
聯(lián)合類型str | int、str | None多類型二選一(3.10+ 語(yǔ)法)
容器類型list[int]、dict[str, int]列表(整數(shù)元素)、字典(字符串鍵+整數(shù)值)
任意類型Any(需導(dǎo)入 from typing import Any)不限制類型,盡量少用,避免失去注解意義
元組類型tuple[int, str]固定長(zhǎng)度、固定元素類型的元組(如 (1, “a”))

到此這篇關(guān)于Python 類型注解核心指南的文章就介紹到這了,更多相關(guān)Python 類型注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 調(diào)用API接口 獲取和解析 Json數(shù)據(jù)

    python 調(diào)用API接口 獲取和解析 Json數(shù)據(jù)

    這篇文章主要介紹了python 如何調(diào)用API接口 獲取和解析 Json數(shù)據(jù),幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Python爬取十篇新聞統(tǒng)計(jì)TF-IDF

    Python爬取十篇新聞統(tǒng)計(jì)TF-IDF

    這篇文章主要為大家詳細(xì)介紹了Python爬取十篇新聞統(tǒng)計(jì)TF-IDF的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python多線程semaphore實(shí)現(xiàn)線程數(shù)控制的示例

    python多線程semaphore實(shí)現(xiàn)線程數(shù)控制的示例

    這篇文章主要介紹了python多線程semaphore實(shí)現(xiàn)線程數(shù)控制的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 深入淺出Python中的JSON操作和實(shí)踐

    深入淺出Python中的JSON操作和實(shí)踐

    在現(xiàn)代軟件開發(fā)中,JSON(JavaScript?Object?Notation)已成為數(shù)據(jù)交換的一種標(biāo)準(zhǔn)格式,本文將深入探討Python中處理JSON數(shù)據(jù)的方法和技巧,感興趣的可以了解下
    2024-03-03
  • Python操作CouchDB數(shù)據(jù)庫(kù)簡(jiǎn)單示例

    Python操作CouchDB數(shù)據(jù)庫(kù)簡(jiǎn)單示例

    這篇文章主要介紹了Python操作CouchDB數(shù)據(jù)庫(kù)簡(jiǎn)單示例,本文講解了連接服務(wù)器、創(chuàng)建數(shù)據(jù)庫(kù)、創(chuàng)建文檔并插入到數(shù)據(jù)庫(kù)等操作實(shí)例,需要的朋友可以參考下
    2015-03-03
  • Keras實(shí)現(xiàn)Vision?Transformer?VIT模型示例詳解

    Keras實(shí)現(xiàn)Vision?Transformer?VIT模型示例詳解

    這篇文章主要為大家介紹了Keras實(shí)現(xiàn)Vision?Transformer?VIT模型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 深入解答關(guān)于Python的11道基本面試題

    深入解答關(guān)于Python的11道基本面試題

    這篇文章主要介紹了關(guān)于Python的11道基本面試題,其中單引號(hào),雙引號(hào),三引號(hào)的區(qū)別、Python的參數(shù)傳遞是值傳遞還是引用傳遞以及什么是lambda函數(shù)?它有什么好處?等一系列的基礎(chǔ)面試題,文中給出了詳細(xì)的解答,需要的朋友可以參考學(xué)習(xí)。
    2017-04-04
  • python爬取微信公眾號(hào)文章圖片并轉(zhuǎn)為PDF

    python爬取微信公眾號(hào)文章圖片并轉(zhuǎn)為PDF

    大家好,本篇文章主要講的是python爬取微信公眾號(hào)文章圖片并轉(zhuǎn)為PDF,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • 在pycharm中無法import所安裝的庫(kù)解決方案

    在pycharm中無法import所安裝的庫(kù)解決方案

    這篇文章主要介紹了在pycharm中無法import所安裝的庫(kù)解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python字符串常用方法及文件簡(jiǎn)單讀寫的操作方法

    python字符串常用方法及文件簡(jiǎn)單讀寫的操作方法

    字符串(sting)是 Python 中最常用的數(shù)據(jù)類型。我們可以使用引號(hào)('或")來創(chuàng)建字符。本文給大家介紹python字符串常用方法及文件簡(jiǎn)單讀寫的操作方法,通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-03-03

最新評(píng)論

呼玛县| 尼勒克县| 宾阳县| 石阡县| 楚雄市| 泽州县| 西峡县| 阳泉市| 图们市| 奉化市| 沙河市| 长沙县| 米易县| 澄城县| 周至县| 昆山市| 那坡县| 罗城| 兴安盟| 渝中区| 普陀区| 柘城县| 西宁市| 阳东县| 射洪县| 手游| 高安市| 中宁县| 松桃| 长白| 彰化县| 元阳县| 五寨县| 太原市| 吴桥县| 通榆县| 论坛| 岑巩县| 若羌县| 龙井市| 凉城县|