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

Python的typing模塊:類型提示 (Type Hinting)全面解析

 更新時(shí)間:2025年09月29日 10:37:55   作者:羚風(fēng)雯  
typing 模塊是現(xiàn)代Python編程中一個(gè)極其重要的部分,typing模塊是Python從腳本語(yǔ)言向工程化語(yǔ)言邁進(jìn)的重要一步,本文給大家介紹Python的typing模塊:類型提示 (Type Hinting)全面解析,感興趣的朋友一起看看吧

typing 模塊是現(xiàn)代Python編程中一個(gè)極其重要的部分。如果你想寫出健壯、可維護(hù)、易于理解的代碼,那么掌握它至關(guān)重要。

什么是typing模塊?

typing 模塊是Python 類型提示 (Type Hinting) 系統(tǒng)的核心。它在 Python 3.5 版本被正式引入,允許開發(fā)者在代碼中標(biāo)注變量、函數(shù)參數(shù)和返回值的預(yù)期類型。

核心思想: Python 本身仍然是一門動(dòng)態(tài)類型語(yǔ)言(在運(yùn)行時(shí)才確定變量類型)。typing 模塊并不會(huì)改變這一點(diǎn)。它提供的是一種“提示”或“注解”,主要服務(wù)于以下三個(gè)方面:

  1. 靜態(tài)類型檢查工具 (Static Type Checkers):像 Mypy 這樣的工具可以像編譯器一樣提前掃描你的代碼,根據(jù)類型提示找出潛在的類型錯(cuò)誤,從而在運(yùn)行前發(fā)現(xiàn) bug。
  2. 集成開發(fā)環(huán)境 (IDE):像 PyCharm 這樣的 IDE 會(huì)利用這些提示來(lái)提供更智能、更精確的代碼補(bǔ)全、錯(cuò)誤高亮和代碼導(dǎo)航。
  3. 代碼可讀性和可維護(hù)性:它讓代碼變得“自文檔化”,任何人(包括未來(lái)的你)都能快速理解函數(shù)應(yīng)該接收什么樣的數(shù)據(jù),以及會(huì)返回什么樣的數(shù)據(jù)。

如何使用?常見類型提示介紹

typing 模塊中導(dǎo)入這些類型來(lái)使用它們。

1. 基礎(chǔ)集合類型 (Collections)

這是最常用的部分,用于描述列表、字典等容器內(nèi)部的數(shù)據(jù)類型。

List: 表示列表。

from typing import List
# 一個(gè)只包含字符串的列表
names: List[str] = ["Alice", "Bob", "Charlie"]
# 一個(gè)只包含整數(shù)的列表
primes: List[int] = [2, 3, 5, 7]

Dict: 表示字典,需要同時(shí)指定鍵 (Key) 和值 (Value) 的類型。

from typing import Dict
# 一個(gè)鍵為字符串、值為浮點(diǎn)數(shù)的字典
item_prices: Dict[str, float] = {"apple": 0.75, "banana": 1.25}

Tuple: 表示元組。

如果元組中每個(gè)元素的類型都一樣,且長(zhǎng)度可變:

from typing import Tuple
# 一個(gè)包含任意數(shù)量整數(shù)的元組
coords: Tuple[int, ...] = (1, 2, 3) 

如果元組長(zhǎng)度固定,且每個(gè)元素類型不同(更常見):

from typing import Tuple
# 一個(gè)包含姓名(str)、年齡(int)、是否會(huì)員(bool)的元組
user_profile: Tuple[str, int, bool] = ("Alice", 30, True)

Set: 表示集合。

from typing import Set
# 一個(gè)只包含整數(shù)的集合
unique_ids: Set[int] = {101, 102, 103}

現(xiàn)代語(yǔ)法 (Python 3.9+)
從 Python 3.9 開始,可以直接使用內(nèi)置的 list, dict, tuple, set 來(lái)進(jìn)行類型提示,代碼更簡(jiǎn)潔:

# Python 3.9+
names: list[str] = ["Alice", "Bob"]
item_prices: dict[str, float] = {"apple": 0.75}

但你仍然需要了解 typing 模塊,因?yàn)樗峁┝烁喔呒?jí)類型。

2. 特殊類型 (Special Types)

這些類型用于處理更復(fù)雜的場(chǎng)景。

Optional[T]: 表示一個(gè)值可以是 T 類型,也可以是 None。
這在函數(shù)參數(shù)有默認(rèn)值 None 時(shí)非常常用。

from typing import Optional
def greet(name: Optional[str] = None):
    if name:
        print(f"Hello, {name}!")
    else:
        print("Hello, world!")
greet("Alice") # 正確
greet()        # 正確

Optional[str] 本質(zhì)上是 Union[str, None] 的簡(jiǎn)寫。

Union[T1, T2, ...]: 表示一個(gè)值可以是多種類型中的任意一種。

from typing import Union
# 一個(gè) ID 可以是整數(shù)或字符串
user_id: Union[int, str] = "user-123"
user_id = 404

Any: 表示任何類型。
這是一個(gè)“逃生艙”,當(dāng)你實(shí)在不知道或者不關(guān)心某個(gè)變量的類型時(shí)可以使用它。但應(yīng)盡量避免使用,因?yàn)樗鼤?huì)讓你失去類型檢查帶來(lái)的所有好處。

from typing import Any
def process_anything(data: Any):
    # 在這里,IDE和類型檢查器對(duì) data 一無(wú)所知
    print(data)

Callable: 用于注解函數(shù)或可調(diào)用對(duì)象。
語(yǔ)法是 Callable[[參數(shù)類型列表], 返回值類型]。

from typing import Callable
# 定義一個(gè)函數(shù),它接受一個(gè)整數(shù),返回一個(gè)字符串
def format_id(user_id: int) -> str:
    return f"USER-{user_id}"
# processor 變量應(yīng)該是一個(gè)可調(diào)用對(duì)象,其簽名與 format_id 匹配
processor: Callable[[int], str] = format_id

函數(shù)中的類型提示

這是類型提示最常見的應(yīng)用場(chǎng)景,使用 -> 來(lái)注解函數(shù)的返回值類型。

from typing import List, Dict, Optional
class Item:
    def __init__(self, name: str, price: float):
        self.name = name
        self.price = price
# 這個(gè)函數(shù)的簽名清晰地告訴我們:
# - 它接受一個(gè)由 Item 對(duì)象組成的列表
# - 它返回一個(gè)浮點(diǎn)數(shù)
def calculate_total(items: List[Item]) -> float:
    total = 0.0
    for item in items:
        total += item.price
    return total
# 示例
shopping_cart = [Item("apple", 0.75), Item("banana", 1.25)]
total_cost = calculate_total(shopping_cart)
print(f"Total cost: {total_cost}") # Total cost: 2.0

總結(jié)

typing 模塊是 Python 從腳本語(yǔ)言向工程化語(yǔ)言邁進(jìn)的重要一步。開始在你的代碼中使用它,你會(huì)發(fā)現(xiàn):

  • Bug 更少了:很多低級(jí)錯(cuò)誤在編碼階段就被 IDE 和靜態(tài)檢查器發(fā)現(xiàn)了。
  • 代碼更好懂了:不再需要去猜測(cè)函數(shù)的參數(shù)和返回值是什么。
  • 重構(gòu)更安全了:IDE 可以更自信地幫你修改代碼。
  • 與現(xiàn)代框架(如 FastAPI)的集成更順暢了。

它是一項(xiàng)投入少量時(shí)間學(xué)習(xí),卻能長(zhǎng)期獲得巨大回報(bào)的技能。

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

相關(guān)文章

  • Python實(shí)現(xiàn)自定義讀寫分離代碼實(shí)例

    Python實(shí)現(xiàn)自定義讀寫分離代碼實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)自定義讀寫分離代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python 垃圾收集機(jī)制的實(shí)例詳解

    python 垃圾收集機(jī)制的實(shí)例詳解

    這篇文章主要介紹了 python 垃圾收集機(jī)制的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助大家理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • django中日志模塊logging的配置和使用方式

    django中日志模塊logging的配置和使用方式

    文章主要介紹了如何在Django項(xiàng)目的`settings.py`文件中配置日志記錄,并使用日志模塊記錄不同級(jí)別的日志,日志級(jí)別包括DEBUG、INFO、WARNING、ERROR和CRITICAL,級(jí)別越高,記錄的日志越詳細(xì),通過(guò)配置和使用日志記錄器,可以更好地排查和監(jiān)控系統(tǒng)問(wèn)題
    2025-01-01
  • 基于Python實(shí)現(xiàn)隨機(jī)點(diǎn)名系統(tǒng)的示例代碼

    基于Python實(shí)現(xiàn)隨機(jī)點(diǎn)名系統(tǒng)的示例代碼

    在某些難以抉擇得時(shí)候,我們經(jīng)常要用外力來(lái)幫助我們做出選擇,比如,梁山出征方臘前沙場(chǎng)點(diǎn)兵,挑選先鋒的場(chǎng)景。所以本文就來(lái)用Python做個(gè)隨機(jī)點(diǎn)名系統(tǒng)吧,需要的可以參考一下
    2023-04-04
  • Python打開指定網(wǎng)頁(yè)使用requests模塊爬蟲示例詳解

    Python打開指定網(wǎng)頁(yè)使用requests模塊爬蟲示例詳解

    這篇文章主要介紹了Python打開指定網(wǎng)頁(yè)使用requests模塊爬蟲的示例,Python?requests是一個(gè)常用的HTTP請(qǐng)求庫(kù),可以方便地向網(wǎng)站發(fā)送HTTP請(qǐng)求,并獲取響應(yīng)結(jié)果,requests模塊比urllib模塊更簡(jiǎn)潔,感興趣的朋友可以參考下
    2024-02-02
  • Python數(shù)據(jù)結(jié)構(gòu)與算法中的棧詳解

    Python數(shù)據(jù)結(jié)構(gòu)與算法中的棧詳解

    這篇文章主要為大家詳細(xì)介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法中的棧,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • python獲取元素在數(shù)組中索引號(hào)的方法

    python獲取元素在數(shù)組中索引號(hào)的方法

    這篇文章主要介紹了python獲取元素在數(shù)組中索引號(hào)的方法,實(shí)例分析了Python中index方法的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Pycharm設(shè)置去除顯示的波浪線方法

    Pycharm設(shè)置去除顯示的波浪線方法

    今天小編就為大家分享一篇Pycharm設(shè)置去除顯示的波浪線方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • python中將txt文件轉(zhuǎn)換為csv文件的三種方法舉例

    python中將txt文件轉(zhuǎn)換為csv文件的三種方法舉例

    對(duì)于大數(shù)據(jù)的處理基本都是以CSV文件為基礎(chǔ)進(jìn)行的,那么在進(jìn)行深度學(xué)習(xí)的處理之前,需要先統(tǒng)一數(shù)據(jù)文件的格式,下面這篇文章主要給大家介紹了關(guān)于python中將txt文件轉(zhuǎn)換為csv文件的三種方法,需要的朋友可以參考下
    2024-06-06
  • Python?Paramiko上傳下載sftp文件及遠(yuǎn)程執(zhí)行命令詳解

    Python?Paramiko上傳下載sftp文件及遠(yuǎn)程執(zhí)行命令詳解

    這篇文章主要為大家介紹了Python?Paramiko上傳下載sftp文件及遠(yuǎn)程執(zhí)行命令示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論

台北县| 潍坊市| 栖霞市| 隆尧县| 临西县| 岳普湖县| 山西省| 玉龙| 崇左市| 平邑县| 定州市| 钦州市| 丹凤县| 怀集县| 永年县| 黎川县| 盐津县| 门源| 封开县| 都匀市| 广昌县| 东兴市| 云林县| 桂东县| 仁化县| 黔东| 黔江区| 昭觉县| 平南县| 什邡市| 新泰市| 三明市| 绥中县| 固阳县| 蓬溪县| 景德镇市| 柳江县| 安义县| 和顺县| 平昌县| 河北区|