python typing overload
最近在看transformers包的源码。
在文件src/transformers/tokenization_utils.py
里面发现了这个用法,感觉还是挺有意思的。
在看到前几行导入的时候,导入了typing
的overload
。
定位到代码中,竟然是装饰一个函数:convert_ids_to_tokens
。这个函数在类里面,出现了3次。
- 其中前面两次出现都是被
overload
装饰了。前面两个函数唯一的区别就是参数类型组合不一样。比如,第一个函数是int
,第二个是List[int]
. - 但是第三个函数,就没有被
overload
装饰。这是为什么?
from typing import Any, Dict, List, Optional, Tuple, Union, overloadclass PreTrainedTokenizer(PreTrainedTokenizerBase):def __init__(self, **kwargs):super().__init__(**kwargs)# Added tokens - We store this for both slow and fast tokenizers# until the serialization of Fast tokenizers is updatedself.added_tokens_encoder: Dict[str, int] = {}self.added_tokens_decoder: Dict[int, str] = {}self.unique_no_split_tokens: List[str] = []self.tokens_trie = Trie()self._decode_use_source_tokenizer = False@overloaddef convert_ids_to_tokens(self, ids: int, skip_special_tokens: bool = False) -> str:...@overloaddef convert_ids_to_tokens(self, ids: List[int], skip_special_tokens: bool = False) -> List[str]:...def convert_ids_to_tokens(self, ids: Union[int, List[int]], skip_special_tokens: bool = False) -> Union[str, List[str]]:if isinstance(ids, int):if ids in self.added_tokens_decoder:return self.added_tokens_decoder[ids]else:return self._convert_id_to_token(ids)tokens = []for index in ids:index = int(index)if skip_special_tokens and index in self.all_special_ids:continueif index in self.added_tokens_decoder:tokens.append(self.added_tokens_decoder[index])else:tokens.append(self._convert_id_to_token(index))return tokens
官网是这么说的:
@overload 装饰器可以修饰支持多个不同参数类型组合的函数或方法。@overload - 装饰定义的系列必须紧跟一个非 @overload-装饰定义(用于同一个函数/方法)。@overload-装饰定义仅是为了协助类型检查器, 因为该装饰器会被非 @overload-装饰定义覆盖,后者用于运行时,而且会被类型检查器忽略。在运行时直接调用 @overload 装饰的函数会触发 NotImplementedError。下面的重载示例给出了比联合类型或类型变量更精准的类型:
这个overload
就是重载的意思:函数(或者叫方法)名称可以相同,但是类型组合不同。
比如上面出现了convert_ids_to_tokens
三次。
- 加
overload
装饰的函数(方法),就是用于被类型器检查的. - 最后一个没有加
overload
,就是在运行的时候用的,而且类型监测器不检查他的类型了. - 最后一个不能加
overload
,也不需要加overload
,最后一个就是用来运行的,当然不可以加。
可是这么做有什么好处呢?多写了6行代码。
优点
- 重载给出了比联合类型或类型变量更精准的类型,也就是类型检查更精确了.
- 用来做类型检查器的,用来运行的。面向这两个需求,分工明确.
- 检查的时候,直接查看被
overload
装饰器的函数(方法). - 运行的时候,直接用没有被
overload
装饰的函数(方法).
缺点
- 我感觉唯一的缺点,就是要多写一些代码。(但是着没什么缺点)
参考链接
- https://docs.python.org/zh-cn/3/library/typing.html#typing.overload
python typing overload相关推荐
- Python3中装饰器@typing.overload的使用
typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py .此模块为类型提示(Type Hints)提供运行时支持 ...
- python typing.Literal 与sqlalchemy中的Literal
python typing.Literal是用于限制函数传参,例如: from typing import Literal def func(a:Literal[1,2,3]): print(a) 那 ...
- python typing optional_python类型检测最终指南--Typing模块的使用
正文共:30429 字 预计阅读时间:76分钟 原文链接:https://realpython.com/python-type-checking/ 作者:Geir Arne Hjelle 译者:陈祥安 ...
- python Typing模块-类型注解
写在篇前 typing 是python3.5中开始新增的专用于类型注解(type hints)的模块,为python程序提供静态类型检查,如下面的greeting函数规定了参数name的类型是st ...
- Python typing —— 类型提示(type hint)
https://www.rddoc.com/doc/Python/3.6.0/zh/library/typing/ 1. 基础类型 指定参数类型和返回值类型: def greeting(name: s ...
- python typing typescript_Python的价值,对比Java/Typescript
我的工作语言是java/kotlin/typescript, 本来是不喜欢它的,不理解它存在的价值,觉得它是个很难在实际工作中使用的语言,比如说做web app的后台,它肯定比不上java,因为不太可 ...
- python typing typescript_将 python 数据转化为 TypeScript 格式
前段时间写过这篇文章将 python 数据转化为 lua 格式, 这段时间因为新项目改用 Creator + TypeScript 的原因, 需要导出 ts 格式的数据. 当然我们可以选择使用 jso ...
- python typing与之配合_python 代码实例1
python 代码实例1 Contributor:游客36044959 Type:代码 Date time:2018-05-26 16:32:38 Favorite:308 Score:1 返回上页 ...
- python typing typescript_typescript
使用官方脚手架构建 npm install -g @vue/cli # OR yarn global add @vue/cli 复制代码 新的Vue CLI工具允许开发者 使用 TypeScript ...
最新文章
- 在线作图|在线做扩增子抽平
- 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java
- iOS网络编程-配置iCloud-图文解说
- java构造方法的签名_如何在 Java 中构造对象(学习 Java 编程语言 034)
- 谷歌浏览器外贸版_针对谷歌SEO,你有哪些值得推荐的工具、插件、网站、app,或者技巧分享?...
- ip 十进制 整型 java_IP地址转换成10进制整数(zt)
- 昔年浅谈做害虫消杀防护的用什么推广效果好?
- java筛选excel数据_Excel中的筛选技巧有哪些,总结四种筛选技巧分享给大家
- authorization 传 就跨域_将Token添加到请求头Heade
- 裴礼文《数学分析中的典型问题与方法》P31~60
- Vue.js实际开发案例(不断整理中...)
- 医院管理系统/医院药品管理系统
- 电影:换肤(Replace)
- androidx中app.startup组件官方指南
- 红外额温枪方案ZHW3548作主控开发程序
- Visual Paradigm在 Windows系统电脑上安装
- 计算机显卡调研,75%以上的人都想换显卡! MC调研报告告诉你吃鸡“帧”香
- 谈古论津丨天津杨柳青年画为何要用娃娃作主题?
- linux 防火墙黑名单
- 华为鲲鹏HCIA考试-练习02
热门文章
- 2021年浙江省跨境电商行业发展概况及发展趋势分析[图]
- Unity UV基于中心点旋转/缩放/位移 Shader
- 【QScrollBar | QSlider | QDial | QProgressBar | QLCDNumber】
- 使用VNC连接树莓派4b如何全屏1080p分辨率,一次更改永久有效!
- 腾讯视频怎么下载_QQ视频如何下载到本地保存
- kindle操作:传输下载的书籍、更改书籍封面
- linux 7 开启远程桌面,CentOS 7 安装使用 VNC 远程桌面
- 会火吗?苹果软件新专利:用户自拍照可组成合影
- php 化学泥浆,天水化学泥浆
- android10rom包,安卓10的刷机教程,教你刷好Killer的精简包