日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python3中装饰器@typing.overload的使用

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3中装饰器@typing.overload的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? typing.py的源碼在:https://github.com/python/cpython/blob/main/Lib/typing.py 。此模塊為類型提示(Type Hints)提供運行時支持。這里介紹下@typing.overload的使用,從python 3.5版本開始將Typing作為標準庫引入。

? ? ? python3中增加了Function Annotation(函數注解,能夠聲明類型)的功能,可以使用類型檢查工具如mypy達到類型靜態檢查的效果。

? ? ? @overload裝飾器可以修飾支持多種不同參數類型組合的函數和方法。一系列@overload-decorated定義必須緊跟一個非@overload-decorated定義(對于相同的函數/方法)。

? ? ? @overload-decorated定義僅是為了協助類型檢查工具,因為它們將被非@overload-decorated定義覆蓋,而后者在運行時會被類型檢查工具忽略。在運行時,直接調用@overload-decorated函數會引發NotImplementedError。

? ? ? 被裝飾的函數的輸入類型和輸出類型都可以更改,非@overload-decorated定義必須通用。

? ? ? 以下為測試代碼:

from typing import overload, Union
from typing_extensions import Literalvar = 2
if var == 1:# python3中增加了Function Annotation(函數注解,能夠聲明類型)的功能,可以使用類型檢查工具如mypy達到類型靜態檢查的效果def foo(name: str) -> str:return "csdn id:" + nameprint(foo("fengbingchun"))#print(foo(5)) # TypeError: can only concatenate str (not "int") to str
elif var == 2:# reference: https://stackoverflow.com/questions/59359943/python-how-to-write-typing-overload-decorator-for-bool-arguments-by-value# 被裝飾的函數的輸入類型和輸出類型都可以更改,非@overload-decorated定義必須通用# The first two overloads use Literal[...] so we can have precise return types:@overloaddef myfunc(arg: Literal[True]) -> str: ...@overloaddef myfunc(arg: Literal[False]) -> int: ...# The last overload is a fallback in case the caller provides a regular bool@overloaddef myfunc(arg: bool) -> Union[str, int]: # Union[str, int] == str | int...def myfunc(arg:bool) -> Union[int, str]:if arg: return "something"else: return 0print(myfunc(True))print(myfunc(False))# Variables declared without annotations will continue to have an inferred type of 'bool'variable = Trueprint(myfunc(variable))print("test finish")

? ? ? GitHub:https://github.com/fengbingchun/Python_Test

總結

以上是生活随笔為你收集整理的Python3中装饰器@typing.overload的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。