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的使用相关推荐
- Python3中装饰器介绍
Python中的装饰器(decorator)是一个接受另一个函数作为参数的函数.装饰器通常会修改或增强它接受的函数并返回修改后的函数.这意味着当你调用一个装饰函数时,你会得到一个与基本定义 ...
- python中装饰器修复技术_python3之装饰器修复技术@wraps
普通函数 def f(): """ 这是一个用来测试装饰器修复技术的函数 """ print("哈哈哈") if __n ...
- python中的json函数_python中装饰器、内置函数、json的详解
装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...
- 8.Python中装饰器是什么?
Python中装饰器是什么? A Python decorator is a specific change that we make in Python syntax to alter functi ...
- python装饰器使用教学,Python教程|简单上手Python中装饰器的使用
如何打造极简主义风格网站教程 .极简主义与其他设计风格<极简主义设计之美> 这篇文章的一部分是讲极简主义是如何与其他设计风格很好配合的.可以把极简主义当作一种属性,而它可以添加或结合其他. ...
- python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景
装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...
- python3大器----装饰器,迭代器,生成器
目录 一:闭包: 1:闭包的作用和定义: 2:闭包的形成条件: 3:闭包的经典案例: 4:闭包的原理: 5: 闭包中使用外部函数变量: 二:装饰器: 1:装饰器的定义和作用: 2:装饰器经典案例分析: ...
- selenium 中装饰器作用
前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间.于是就想是不是可以只打开一 ...
- python装饰器作用-python中装饰器的作用
装饰器的作用就是用一个新函数封装旧函数(是旧函数代码不变的情况下增加功能)然后会返回一个新函数,新函数就叫做装饰器,一般为了简化装饰器会用语法糖@新函数来简化 例子: 这是一段代码,但功能太少,要对这 ...
最新文章
- ASP.NET Page执行顺序如:OnPreInit()、OnInit()
- 下一代对话系统中的关键技术(下篇)
- 视觉感知_产品设计中的视觉感知
- css 字体加粗_HTML基础属性与CSS基础
- bzoj4152-[AMPPZ2014]The_Captain
- AI风向标:发改委重大工程项目公布,首个无人车路测试点落户亦庄
- whitepages 被调查_槐荫区美里湖办事处残联开展2020年残疾人精准服务需求调查工作...
- 【转】对JavaScript调用堆栈和setTimeout用法的深入研究
- 使用升级版的 Bootstrap typeahead v1.2.2
- 数字集成电路与系统设计基础知识
- 超分辨率重建——关于YIQ空间
- python激光扫描雷达_一文详解固态激光雷达的里程计(loam_livox)
- RabbitMQ-Plugin configuration unchanged.
- 麓言科技CAD制图技巧
- std::stable_sort 和 std::for_each 的用法[转]
- 连接工作站跑机器学习(Linux命令)
- 阿里云狂揽国际朋友圈,集体融入数字中国新时代
- Linux 版本 内核版本 发行版本
- 【BZOJ 1934】 [Shoi2007]Vote 善意的投票
- 在成为Android工程师的一年里,我经历了什么?
热门文章
- opencv函数copyto的用法
- 【camera-lidar】自动驾驶相机-激光雷达融合方案综述
- 基于颜色特征,形状特征和纹理特征的数字图像的检索(Digital Image Retrieval)MATLAB GUI实现(本科毕业设计)
- 【opencv】(13) 案例:停车场空余车位检测,附python完整代码
- Learn OpenGL (十):材质
- Vue、angular等框架实现双向绑定的原理,核心机制是使用了Object.defineProperty
- Class101–如何高效地构建强大的数字绘画
- Blender从头到尾创建低多边形角色学习教程 Low Poly Characters – Blender Bitesize Course
- Maya教程-XGEN制作毛发技能学习 Patreon – Cartoon Grooming Series by Jesus FC
- windows下 Source Monitor代码度量工具的使用