亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一篇文章帶你了解python中的typing模塊和類型注解

 更新時間:2022年02月08日 08:43:30   作者:KbMan  
這篇文章主要為大家詳細介紹了python中的類型注解,使用typing模塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

function annotation 寫法:

  • 使用冒號 : 加類型代表參數(shù)類型
    • 默認值參數(shù)示例:b: int = 2
  • 使用 -> 加類型代表返回值類型

python解釋器運行時并不會檢查類型,類型不對也不會拋異常,僅僅是注解而已。示例:

def plus(a: int, b: int = 2) -> int:
    return a + b

python 解析器并不會在意類型注解,嚴格來說這是不對的,Python 會把類型信息放在 __annotations__ 屬性中:

>>> def foo(a: str):
...     print('hello', a)
...

>>> foo.__annotations__
{'a': str}

>>> class Bar:
...     a: str
...     b: int

>>> Bar.__annotations__
{'a': str, 'b': int}

typing模塊

內(nèi)置提供的類型:int 、str 、float,typing模塊提供的類型:Dict 、List 、Tuble...

typing使用方括號 Dict[str, int] 而不是圓括號 Dict(str, int)

Dict

Dict[str, int]: 表示一個 keys 的類型為 str,values 的類型為 int 的字典,比如 {"a": 1, "b": 2}

from typing import Dict
Dict[str, Dict[str, List[str]]]如下:
{
    '原木鎮(zhèn)': {
        '第一小學': ['張偉', '王偉', '王芳'],
        '第二小學': ['李偉', '李娜'],
    },
    '鴿子鎮(zhèn)': {
        '高山中學': ['張敏', '李靜'],
        '億百中學': ['王靜']
        '蟒蛇小學': ['劉偉', '王秀英']
    }
}

List

List[int] 表示由整型組成的列表,比如[0, 1, 1, 2, 3]

List[List[int]] = [[1, 2], [2, 3]]

Tuple

Tuple[int, float, str] is a tuple of an int, a float and a string.

person: Tuple[str, int, float] = ('Mike', 22, 1.75)

set/AbstractSet

根據(jù)官方文檔,Set 推薦用于注解返回類型,AbstractSet 用于注解參數(shù)

def describe(s: AbstractSet[int]) -> Set[int]:
    return set(s)

Sequence

Sequence,是 collections.abc.Sequence 的泛型,在某些情況下,我們可能并不需要嚴格區(qū)分一個變量或參數(shù)到底是列表 list 類型還是元組 tuple 類型,我們可以使用一個更為泛化的類型,叫做 Sequence,其用法類似于 List

def square(elements: Sequence[float]) -> List[float]:
    return [x ** 2 for x in elements]

NoReturn

NoReturn,當一個方法沒有返回結(jié)果時,為了注解它的返回類型,我們可以將其注解為NoReturn

def hello() -> NoReturn:
    print('hello')

Any

Any,可以代表所有類型,所有的無參數(shù)類型注解和返回類型注解的都會默認使用 Any 類型,以下兩個函數(shù)等價:

def add(a):
    return a + 1

def add(a: Any) -> Any:
    return a + 1

TypeVar

TypeVar,自定義兼容特定類型的變量,比如有的變量聲明為 int、float、None 都是符合要求的,實際就是代表任意的數(shù)字或者空內(nèi)容都可以,其他的類型則不可以,比如列表 list、字典 dict 等等,像這樣的情況,我們可以使用 TypeVar 來表示。

height = 1.75
Height = TypeVar('Height', int, float, None)
def get_height() -> Height:
    return height

NewType

newType,聲明一些具有特殊含義的類型,像 Tuple 的例子一樣,我們需要將它表示為 Person,即一個人的含義,但但從表面上聲明為 Tuple 并不直觀,所以我們可以使用 NewType 為其聲明一個類型,如:

Person = NewType('Person', Tuple[str, int, float])
person = Person(('Mike', 22, 1.75))

實際上 person 就是一個 tuple 類型,我們可以對其像 tuple 一樣正常操作。

Callable

Callable,可調(diào)用類型,通常用來注解一個方法, 在聲明的時候需要使用 Callable[[Arg1Type, Arg2Type, ...], ReturnType] 這樣的類型注解,將參數(shù)類型和返回值類型都要注解出來,例如:

def date(year: int, month: int, day: int) -> str:
    return f'{year}-{month}-{day}'

def get_date_fn() -> Callable[[int, int, int], str]:
    return date

-> Callable[[int, int, int], str]: 中括號內(nèi)分別標記了返回的方法的參數(shù)類型和返回值類型。

Union

Union,聯(lián)合類型,Union[X, Y] 代表要么是 X 類型,要么是 Y 類型。

Union[Union[int, str], float] == Union[int, str, float]
Union[int] == int
Union[int, str, int] == Union[int, str]
# 無參數(shù)順序
Union[int, str] == Union[str, int]

在一些方法參數(shù)聲明的時候比較有用,比如一個方法,要么傳一個字符串表示的方法名,要么直接把方法傳過來:

def process(fn: Union[str, Callable]):
    if isinstance(fn, str):
        # str2fn and process
        pass
    elif isinstance(fn, Callable):
        fn()

這樣的聲明在一些類庫方法定義的時候十分常見。

Optional

Optional,意思是說這個參數(shù)可以為空或已經(jīng)聲明的類型,即 Optional[X] 等價于 Union[X, None]。

Optional 并不等價于可選參數(shù),當它作為參數(shù)類型注解的時候,不代表這個參數(shù)可以不傳遞,而是說這個參數(shù)可以傳None,不傳也會報錯。

當一個方法執(zhí)行結(jié)果,如果執(zhí)行完畢就不返回錯誤信息, 如果發(fā)生問題就返回錯誤信息,則可以這么聲明:

def judge(result: bool) -> Optional[str]:
    if result: return 'Error Occurred'

Generator

Generator,想代表一個生成器類型,可以使用 Generator,它的聲明比較特殊,其后的中括號緊跟著三個參數(shù),分別代表 YieldType、SendType、ReturnType,如:

def echo_round() -> Generator[int, float, str]:
    sent = yield 0
    while sent >= 0:
        sent = yield round(sent)
    return 'Done'

在這里 yield 關鍵字后面緊跟的變量的類型就是 YieldType,yield 返回的結(jié)果的類型就是 SendType,最后生成器 return 的內(nèi)容就是 ReturnType。

當然很多情況下,生成器往往只需要 yield 內(nèi)容就夠了,我們是不需要 SendType 和 ReturnType 的,可以將其設置為空,如:

def infinite_stream(start: int) -> Generator[int, None, None]:
    while True:
        yield start
        start += 1

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!    

相關文章

  • Python用戶推薦系統(tǒng)曼哈頓算法實現(xiàn)完整代碼

    Python用戶推薦系統(tǒng)曼哈頓算法實現(xiàn)完整代碼

    這篇文章主要介紹了Python用戶推薦系統(tǒng)曼哈頓算法實現(xiàn)完整代碼,簡單介紹了曼哈頓距離的定義,然后分享了其Python實現(xiàn)代碼,具有一定借鑒價值,需要的朋友可以了解下。
    2017-12-12
  • python 通過麥克風錄音 生成wav文件的方法

    python 通過麥克風錄音 生成wav文件的方法

    今天小編就為大家分享一篇python 通過麥克風錄音 生成wav文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python xlwings插入Excel圖片的實現(xiàn)方法

    Python xlwings插入Excel圖片的實現(xiàn)方法

    這篇文章主要介紹了Python xlwings插入Excel圖片的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Python通用驗證碼識別OCR庫ddddocr的安裝使用教程

    Python通用驗證碼識別OCR庫ddddocr的安裝使用教程

    dddd_ocr是一個用于識別驗證碼的開源庫,又名帶帶弟弟ocr,下面這篇文章主要給大家介紹了關于Python通用驗證碼識別OCR庫ddddocr的安裝使用教程,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • 通過Python繪制中國結(jié)的示例代碼

    通過Python繪制中國結(jié)的示例代碼

    再過不久就要到新年了,所以這篇文章將為大家介紹一下如何通過Python代碼繪制一個中國結(jié),文中的示例代碼講解詳細,感興趣的可以動手試一試
    2022-01-01
  • Django實現(xiàn)全文檢索的方法(支持中文)

    Django實現(xiàn)全文檢索的方法(支持中文)

    這篇文章主要介紹了Django實現(xiàn)全文檢索的方法(支持中文),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • python+ollama自己寫代碼調(diào)用本地deepseek模型

    python+ollama自己寫代碼調(diào)用本地deepseek模型

    本文主要介紹了python+ollama自己寫代碼調(diào)用本地deepseek模型,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • 基于Python pip用國內(nèi)鏡像下載的方法

    基于Python pip用國內(nèi)鏡像下載的方法

    今天小編就為大家分享一篇基于Python pip用國內(nèi)鏡像下載的方法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Pycharm 如何一鍵加引號的方法步驟

    Pycharm 如何一鍵加引號的方法步驟

    這篇文章主要介紹了Pycharm 如何一鍵加引號的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 利用Python快速搭建Markdown筆記發(fā)布系統(tǒng)

    利用Python快速搭建Markdown筆記發(fā)布系統(tǒng)

    這篇文章主要為大家詳細介紹了使用Python生態(tài)的成熟工具,在30分鐘內(nèi)搭建一個支持Markdown渲染、分類標簽、全文搜索的私有化知識發(fā)布系統(tǒng),感興趣的小伙伴可以參考下
    2025-04-04

最新評論