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

Python模塊Typing.overload的使用場景分析

 更新時間:2024年02月05日 09:52:46   作者:__walden  
在 Python 中,typing.overload 是一個用于定義函數重載的裝飾器,函數重載是指在一個類中可以定義多個相同名字但參數不同的函數,使得在調用函數時可以根據參數的不同選擇不同的函數執(zhí)行,這篇文章主要介紹了Python模塊Typing.overload的使用,需要的朋友可以參考下

一、 使用場景

Python3 >= 3.5

當一個函數被定義了規(guī)定的輸入或輸出的規(guī)定的數據類型時(即Function Annotation函數注解功能),只能輸入或輸出規(guī)定的 靜態(tài)數據類型 。那么如果傳入其他類型的數據時就會報錯,如下:

def test(name: str) -> str:
    return f"hello {name}"
test(1)
 ... TypeError: must be str, not int

但這是運行時的錯誤,也就是代碼在執(zhí)行時才會發(fā)現問題。最好是我們能在寫完代碼時就發(fā)現是否存在問題。因此就有了類型檢查工具,比如mypy這樣的工具,還有很多IDE也集成了這樣的檢查工具。

那么如果就需要使用該函數,又需要輸入或輸出 動態(tài)數據類型 怎么辦呢,所以引入了overload。

二、實現動態(tài)語言

解決以上問題又兩種方案:

  • 1、使用typing.TypeVar
  • 2、使用typing.overload

2.1 TypeVar

先說第一種,對于固定數量參數的方法而言,同一個參數如果打算接受多種類型,可以這么用,比方說參數可以是:int, float, str:

from typing import TypeVar
T = TypeVar('T', int, float, str)
def test(name: T) -> str:
return f"hello {name}"
test(2)

這種方案更類似于靜態(tài)語言中的interface的概念,定義一個通用的父類,這樣的話,你可以傳遞子類型過去。

2.2 overload

overload翻譯過來是 重載 的意思,Java中有這樣的兩個概念,重寫(override)和重載(overload)。重寫其實是在保證輸入和輸出不變的情況下重寫實現邏輯。而重載則是允許修改輸入和輸出,即同一個方法名可以支持多種類型的輸入和輸出。

跟靜態(tài)語言中還是很有差別的。

from typing import overload
@overload
def test(name: str) -> str:
...
@overload
def test(name: float) -> str:
...
@overload
def test(name: int, age: int) -> str:
...
def test(name, age=18):
 return f"hello {name}"
test(2)

通過定義多個同名函數,上面的同名函數需要通過overload裝飾器裝飾??梢钥吹奖谎b飾的函數的輸入類型和輸出類型都可以更改。但是,最后一定要定義一個沒有裝飾器的同名函數 才能實現動態(tài)的效果。

這么用的作用是什么呢?文檔中有一句話很重要:

“The @overload-decorated definitions are for the benefit of the type checker only, since they will be overwritten by the non-@overload-decorated definition, while the latter is used at runtime but should be ignored by a type checker. ”

翻譯:被overload裝飾的函數僅僅是為了受益于類型檢查工具,因為它們會被沒有overload裝飾的函數定義覆蓋,盡管未被裝飾的函數是用于運行時的,但是會 被類型檢查工具忽略 。

所以,看到這應該明白了,overload僅僅是給檢查工具用的。但如果靜態(tài)類型檢查變成工程的一部分的話,這也會避免很多問題,在寫代碼時也會比心里有底。

補充:

python typing.overload

在 Python 中,typing.overload 是一個用于定義函數重載的裝飾器。函數重載是指在一個類中可以定義多個相同名字但參數不同的函數,使得在調用函數時可以根據參數的不同選擇不同的函數執(zhí)行。這種機制可以增加代碼的可讀性和可維護性。在 Python 3.5 版本以后,引入了 typing.overload 模塊來支持函數重載。

1. 為什么需要函數重載?

在很多編程語言中,函數的重載是一種常見的編程技術。它允許我們使用相同的函數名字來執(zhí)行不同的操作,根據函數接收的參數類型和數量來確定具體執(zhí)行哪個函數。這樣可以使代碼更加簡潔和易于理解。

假設我們有一個函數 add,用于實現兩個數字相加的操作。使用函數重載,我們可以定義多個版本的 add 函數,分別支持不同類型的參數。例如,我們可以定義一個 add 函數用于整數相加,另一個 add 函數用于浮點數相加。

2. typing.overload 的使用方法

在 Python 中使用 typing.overload 模塊定義函數重載非常簡單。我們只需要在函數的上方使用 @overload 裝飾器,并在函數的下方使用 @overload 裝飾器的實現。

下面是一個示例,演示了如何使用 typing.overload 定義一個 add 函數,實現整數和浮點數的相加操作:

from typing import overload
@overload
def add(a: int, b: int) -> int:
    pass
@overload
def add(a: float, b: float) -> float:
    pass
def add(a, b):
    return a + b

在上面的例子中,我們首先使用 @overload 裝飾器定義了兩個函數簽名,分別表示整數相加和浮點數相加。然后,在函數的下方實現了一個通用的 add 函數,用于處理不同類型的參數。注意,在通用函數中,我們沒有指定參數類型和返回類型。

3. 函數重載的實際應用

函數重載可以在很多場景中使用,特別是當我們需要實現一些具有復雜參數類型的函數時。下面是一些實際應用的例子:

3.1 數據類型轉換

假設我們有一個函數 to_str,用于將不同類型的變量轉換為字符串。我們可以使用函數重載來實現對不同類型的變量進行不同的轉換操作。

from typing import overload
@overload
def to_str(value: int) -> str:
    pass
@overload
def to_str(value: float) -> str:
    pass
def to_str(value):
    return str(value)

3.2 集合操作

假設我們有一個函數 union,用于合并兩個集合。我們可以使用函數重載來支持不同類型的集合合并。

from typing import List, overload
@overload
def union(a: List[int], b: List[int]) -> List[int]:
    pass
@overload
def union(a: List[str], b: List[str]) -> List[str]:
    pass
def union(a, b):
    return a + b

3.3 API 接口

假設我們有一個網絡請求庫,我們可以使用函數重載來支持不同類型的請求。

from typing import Dict, overload
@overload
def request(url: str, params: Dict[str, str]) -> str:
    pass
@overload
def request(url: str, data: bytes) -> bytes:
    pass
def request(url, params_or_data):
    # 實現網絡請求
    pass

4. 總結

函數重載是一種常見的編程技術,在 Python 中可以使用 typing.overload 模塊來實現。它可以提高代碼的可讀性和可維護性,同時還可以在處理不同類型的參數時提供更靈活的選擇。在實際應用中,函數重載可以應用于數據類型轉換、集合操作、API 接口等

到此這篇關于Python模塊Typing.overload的使用的文章就介紹到這了,更多相關Python Typing.overload的使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Python的連接符

    詳解Python的連接符

    這篇文章主要為大家介紹了Python的連接符,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • python中計算一個列表中連續(xù)相同的元素個數方法

    python中計算一個列表中連續(xù)相同的元素個數方法

    今天小編就為大家分享一篇python中計算一個列表中連續(xù)相同的元素個數方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python繪圖如何自定義x軸

    python繪圖如何自定義x軸

    這篇文章主要介紹了python繪圖如何自定義x軸問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Django中的Model操作表的實現

    Django中的Model操作表的實現

    這篇文章主要介紹了Django中的Model操作表的實現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • django authentication 登錄注冊的實現示例

    django authentication 登錄注冊的實現示例

    本文主要介紹了使用Django內置的authentication功能實現用戶注冊和登錄功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11
  • python繪圖demo實現流程介紹

    python繪圖demo實現流程介紹

    這篇文章主要介紹了python繪圖demo實現流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-11-11
  • 詳解Python排序算法的實現(冒泡,選擇,插入,快速)

    詳解Python排序算法的實現(冒泡,選擇,插入,快速)

    這篇文章主要為大家介紹了Python中常見的四種排序算法的實現:冒泡排序、選擇排序、插入排序和快速排序,文中通過圖片詳細講解了它們實現的原理與代碼,需要的可以參考一下
    2022-04-04
  • 自定義django admin model表單提交的例子

    自定義django admin model表單提交的例子

    今天小編就為大家分享一篇自定義django admin model表單提交的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 基于Django的Admin后臺實現定制簡單監(jiān)控頁

    基于Django的Admin后臺實現定制簡單監(jiān)控頁

    Django自帶的后臺管理是Django明顯特色之一,可以讓我們快速便捷管理數據。后臺管理可以在各個app的admin.py文件中進行控制。本文將主要介紹如何利用Admin后臺實現監(jiān)控頁的定制,快來和小編一起學習一下吧
    2021-12-12
  • Python單元測試框架unittest簡明使用實例

    Python單元測試框架unittest簡明使用實例

    這篇文章主要介紹了Python單元測試框架unittest簡明使用實例,本文講解了基本測試步驟、和測試實例,需要的朋友可以參考下
    2015-04-04

最新評論

城固县| 确山县| 揭阳市| 武功县| 郑州市| 克什克腾旗| 长治市| 文昌市| 丰都县| 勃利县| 岑巩县| 正蓝旗| 林州市| 贵定县| 拉孜县| 永和县| 新宾| 平阳县| 德庆县| 涪陵区| 富平县| 渭南市| 永登县| 无极县| 榆中县| 南溪县| 绵竹市| 新郑市| 绥滨县| 绥江县| 犍为县| 五莲县| 涿州市| 郴州市| 闵行区| 元朗区| 南昌市| 册亨县| 临武县| 宁武县| 武汉市|