欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 中的 typing 模塊常見(jiàn)用法

 更新時(shí)間:2024年09月24日 16:39:29   作者:NLP工程化  
Python的typing模塊提供類(lèi)型提示功能,增強(qiáng)代碼可讀性和類(lèi)型安全性,通過(guò)定義變量、參數(shù)、返回值的類(lèi)型,可以幫助IDE和靜態(tài)分析工具提高代碼質(zhì)量,支持List、Dict、Tuple等類(lèi)型定義,以及Optional、Union、Any等高級(jí)用法,還可以使用mypy等工具進(jìn)行類(lèi)型檢查

typing 模塊是 Python 提供的一個(gè)標(biāo)準(zhǔn)庫(kù),主要用于為函數(shù)、變量和類(lèi)定義類(lèi)型提示(Type Hints),從而提高代碼的可讀性和類(lèi)型安全性。雖然 Python 是動(dòng)態(tài)類(lèi)型語(yǔ)言,但通過(guò) typing 模塊,開(kāi)發(fā)者可以明確指定變量和函數(shù)的參數(shù)、返回值的類(lèi)型,幫助 IDE 或靜態(tài)代碼分析工具提供更好的代碼提示和錯(cuò)誤檢查。雖然 Python 本身不會(huì)強(qiáng)制執(zhí)行這些類(lèi)型檢查,但借助 mypy 等工具,可以進(jìn)行靜態(tài)類(lèi)型分析,幫助發(fā)現(xiàn)潛在問(wèn)題。

源碼位置:D:\Python310\Lib\typing.py

一.常見(jiàn)類(lèi)型提示

1.ListDict

用于表示列表和字典類(lèi)型。

(1)List[type] 表示一個(gè)包含特定類(lèi)型元素的列表。

(2)Dict[key_type, value_type] 表示鍵和值有特定類(lèi)型的字典。

2.Tuple

表示一個(gè)包含特定類(lèi)型的元組。Tuple[type1, type2] 表示一個(gè)包含兩個(gè)特定類(lèi)型的元組。

3.Optional

表示變量可以是某種類(lèi)型,也可以是 NoneOptional[type] 等價(jià)于 Union[type, None],表示某個(gè)值可以是 typeNone。

4.Union

表示一個(gè)變量可以是多個(gè)類(lèi)型之一。Union[type1, type2, ...] 表示變量可以是 type1、type2 等中的任意一種。

5.Any

表示可以是任意類(lèi)型。Any 用于聲明一個(gè)變量可以是任意類(lèi)型,不做類(lèi)型檢查。

6.Callable

表示可調(diào)用的對(duì)象,如函數(shù)。Callable[[arg_type1, arg_type2], return_type] 用于表示一個(gè)函數(shù),參數(shù)類(lèi)型為 arg_type1、arg_type2,返回值類(lèi)型為 return_type。

7.TypeVar

用于定義泛型。TypeVar 用于創(chuàng)建通用函數(shù)或類(lèi)。

8.Literal

限制變量值為某些特定的值。

9.Set

表示一個(gè)包含特定類(lèi)型元素的集合。比如 Set[str] 表示一個(gè)字符串集合。

10.FrozenSet

表示一個(gè)不可變的集合。比如 FrozenSet[int] 表示一個(gè)不可變的整數(shù)集合。

11.Generic

用于創(chuàng)建泛型類(lèi)和泛型接口。比如 class MyList(Generic[T]) 表示一個(gè)泛型列表類(lèi),可以存儲(chǔ)類(lèi)型 T 的元素。

12.Type

表示一個(gè)類(lèi)型對(duì)象。比如 Type[str] 表示 str 類(lèi)型。

二.常見(jiàn)用法

1.List|Dict|Tuple示例

from typing import List, Dict, Tuple
# 一個(gè)返回包含字符串的列表的函數(shù)
def get_names() -> List[str]:
    return ["Alice", "Bob", "Charlie"]
# 一個(gè)帶有字典類(lèi)型提示的函數(shù)
def get_person_data() -> Dict[str, int]:
    return {"Alice": 30, "Bob": 25}
# 一個(gè)帶有元組類(lèi)型提示的函數(shù)
def get_coordinates() -> Tuple[int, int]:
    return (10, 20)
  • get_names():返回一個(gè) List[str],即一個(gè)字符串列表。
  • get_person_data():返回一個(gè) Dict[str, int],表示字典的鍵是字符串,值是整數(shù)。
  • get_coordinates():返回一個(gè) Tuple[int, int],即一個(gè)包含兩個(gè)整數(shù)的元組。

2.Optional 示例

from typing import Optional
def find_user(user_id: int) -> Optional[str]:
    if user_id == 1:
        return "Alice"
    return None

find_user():返回類(lèi)型是 Optional[str],表示可能返回字符串,或者返回 None。

3.Union 示例

from typing import Union
def process_input(data: Union[int, str]) -> str:
    if isinstance(data, int):
        return f"Received an integer: {data}"
    return f"Received a string: {data}"

process_input():參數(shù)類(lèi)型是 Union[int, str],表示該函數(shù)接收整數(shù)或字符串兩種類(lèi)型。

4.Callable 示例

from typing import Callable
# 定義一個(gè)函數(shù)接收另一個(gè)函數(shù)作為參數(shù)
def execute_task(task: Callable[[int, int], int], a: int, b: int) -> int:
    return task(a, b)
# 示例調(diào)用
def add(x: int, y: int) -> int:
    return x + y
result = execute_task(add, 3, 4)  # 返回 7

execute_task():接收一個(gè)可調(diào)用對(duì)象(函數(shù)),該對(duì)象接收兩個(gè)整數(shù)并返回一個(gè)整數(shù)。

5.TypeVar 泛型示例

from typing import TypeVar, List
T = TypeVar('T')
def get_first_element(lst: List[T]) -> T:
    return lst[0]
# 使用時(shí)可以是不同的類(lèi)型
print(get_first_element([1, 2, 3]))      # 返回 1
print(get_first_element(['a', 'b', 'c']))  # 返回 'a'

TypeVar:允許定義一個(gè)泛型函數(shù) get_first_element,它可以適用于任何類(lèi)型的列表。

三.高級(jí)用法

1.Literal 示例

from typing import Literal
def set_mode(mode: Literal['read', 'write']) -> None:
    if mode == 'read':
        print("Setting mode to read")
    elif mode == 'write':
        print("Setting mode to write")
set_mode('read')   # 合法
set_mode('write')  # 合法
set_mode('delete') # 非法,會(huì)被靜態(tài)分析工具標(biāo)記為錯(cuò)誤

Literal:限制傳入的值必須是特定的字面值,在此例中只能是 'read''write'。

2.TypedDict示例

from typing import TypedDict
class User(TypedDict):
    name: str
    age: int
def get_user() -> User:
    return {"name": "Alice", "age": 30}

TypedDict:用于定義字典的具體結(jié)構(gòu),使字典的鍵和值類(lèi)型更加明確。

3.Protocol示例

用于定義接口協(xié)議,可以檢查對(duì)象是否實(shí)現(xiàn)了特定的方法和屬性。

from typing import Protocol
class Drawable(Protocol):
    def draw(self) -> None:
        ...

4.Final 示例

表示一個(gè)變量、方法或?qū)傩圆荒鼙恢貙?xiě)或修改。

from typing import Final
MAX_SIZE: Final = 100

5.ClassVar 示例

表示一個(gè)類(lèi)變量,它不應(yīng)被視為實(shí)例變量的一部分。

from typing import ClassVar
class MyClass:
    class_var: ClassVar[int] = 42

6.NoReturn

表示函數(shù)不會(huì)返回任何值(通常用于函數(shù)拋出異常的情況)。

from typing import NoReturn
def terminate() -> NoReturn:
    raise SystemExit

參考文獻(xiàn)

[1] typing 對(duì)類(lèi)型提示的支持:https://docs.python.org/zh-cn/3/library/typing.html

[2] https://github.com/python/mypy

[3] https://www.mypy-lang.org/

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

相關(guān)文章

  • Python面向?qū)ο蠓庋b操作案例詳解 II

    Python面向?qū)ο蠓庋b操作案例詳解 II

    這篇文章主要介紹了Python面向?qū)ο蠓庋b操作,結(jié)合案例形式詳細(xì)分析了Python面向?qū)ο笤谟螒蛑蟹庋b角色的屬性、動(dòng)作相關(guān)原理與使用技巧,需要的朋友可以參考下
    2020-01-01
  • Django多層嵌套ManyToMany字段ORM操作詳解

    Django多層嵌套ManyToMany字段ORM操作詳解

    這篇文章主要介紹了Django多層嵌套ManyToMany字段ORM操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • django中間件及自定義中間件的實(shí)現(xiàn)方法

    django中間件及自定義中間件的實(shí)現(xiàn)方法

    中間件就是在目標(biāo)和結(jié)果之間進(jìn)行的額外處理過(guò)程,在Django中就是request和response之間進(jìn)行的處理,相對(duì)來(lái)說(shuō)實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,這篇文章主要介紹了django中間件以及自定義中間件?,需要的朋友可以參考下
    2023-06-06
  • python實(shí)現(xiàn)班級(jí)檔案管理系統(tǒng)

    python實(shí)現(xiàn)班級(jí)檔案管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)班級(jí)檔案管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python表格處理模塊xlrd在Anaconda中的安裝方法

    Python表格處理模塊xlrd在Anaconda中的安裝方法

    本文介紹在Anaconda環(huán)境下,安裝Python讀取.xls格式表格文件的庫(kù)xlrd的方法,xlrd是一個(gè)用于讀取Excel文件的Python庫(kù),本文介紹了xlrd庫(kù)的一些主要特點(diǎn)和功能,感興趣的朋友一起看看吧
    2024-04-04
  • Phantomjs抓取渲染JS后的網(wǎng)頁(yè)(Python代碼)

    Phantomjs抓取渲染JS后的網(wǎng)頁(yè)(Python代碼)

    phantomjs:我的理解就是它是一個(gè)無(wú)顯示的瀏覽器,也就是說(shuō)除了不能顯示頁(yè)面內(nèi)容以外,瀏覽器能干的活兒它基本上都能干。下面我們就來(lái)利用他做點(diǎn)有趣的事情
    2016-05-05
  • python自動(dòng)化腳本安裝指定版本python環(huán)境詳解

    python自動(dòng)化腳本安裝指定版本python環(huán)境詳解

    這篇文章主要為大家詳細(xì)介紹了python自動(dòng)化腳本安裝指定版本python環(huán)境的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • python射線法判斷檢測(cè)點(diǎn)是否位于區(qū)域外接矩形內(nèi)

    python射線法判斷檢測(cè)點(diǎn)是否位于區(qū)域外接矩形內(nèi)

    這篇文章主要為大家詳細(xì)介紹了python射線法判斷檢測(cè)點(diǎn)是否位于區(qū)域外接矩形內(nèi),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • pandas采樣的實(shí)現(xiàn)方法

    pandas采樣的實(shí)現(xiàn)方法

    pandas提供了多種方法進(jìn)行隨機(jī)采樣,包括指定數(shù)量、按比例、設(shè)置隨機(jī)種子、有無(wú)放回抽樣及按列和分層抽樣,下面就來(lái)介紹一下,感興趣的可以了解一下
    2024-12-12
  • Pandas刪除數(shù)據(jù)的幾種情況(小結(jié))

    Pandas刪除數(shù)據(jù)的幾種情況(小結(jié))

    這篇文章主要介紹了Pandas刪除數(shù)據(jù)的幾種情況(小結(jié)),詳細(xì)的介紹了4種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評(píng)論