隐藏页面特效

python中的泛型使用TypeVar

1|0引入为什么需要TypeVar


PEP484的作者希望借助typing模块引入类型提示,不改动语言的其它部分。通过精巧的元编程技术,让类 支持[]运算不成问题。但是方括号内的T变量必须在某处定义,否则要大范围改动python解释器才能让泛型 支持特殊的[]表示法。鉴于此,我们增加了typing.TypeVar构造函数,把变量名称引入当前命名空间。由于 javac#和TypingScript等语言不要求实现声明类型变量的名称,因此没有与python的TypeVar类对应的结构。

2|0示例


from collections.abc import Iterable from typing import TypeVar T = TypeVar('T') def mode(data: Iterable[T]) -> T: return data[1:] if __name__ == '__main__': list1 = [1.1,1.2,1.3,1.4,1.5] list2 = [1,2,3,4,5] data1 = mode(list1) data2 = mode(list2) print(data1) print(data2)

3|0受限的TypeVar


TypeVar还接受一些位置参数,以对类型参数施加限制。 from collections.abc import Iterable from decimal import Decimal from fractions import Fraction from typing import TypeVar NumberT = TypeVar('NumberT', float, Decimal, Fraction) def mode(data: Iterable[NumberT]) -> NumberT: ...

4|0有界的TypeVar


from collections.abc import Iterable, Hashable def mode(data: Iterable[Hashable]) -> Hashable: 现在的问题是,返回的项是Hashable类型。Hashable是一个抽象基类。只实现了__hash__方法。因此, 除了调用hash(),类型检查工具不会允许对返回值做其它任何操作。所以,这么做没有任何意义。 解决方法是使用TypeVar的另一个可选参数,即关键字参数bound。这个参数会为可接受的类型设定一个 上边界。下面的实例使用bound=Hashable指明,类型参数可以是Hashable或它的任何子类型。 from collections import Counter from collections.abc import Iterable, Hashable from typing import TypeVar HashableT = TypeVar('HashableT', bound=Hashable) def mode(data: Iterable[HashableT]) -> HashableT: pairs = Counter(data).most_common(1) if len(pairs) == 0: raise ValueError('no mode for empty data') return pairs[0][0]

__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/17393734.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(857)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2021-05-12 calendar模块
2021-05-12 python开发接口时,使用jsonschema模块对数据进行校验
2021-05-12 python中动态生成类type的用法
2021-05-12 abc模块的用法
2021-05-12 python操作txt文件,去除文件中的隔行空行
2020-05-12 默认形参和关键字实参,收集参数,命名关键字参数,return自定义返回,全局变量和局部变量,函数名的使用---day10
2020-05-12 文件的拓展及文件函数,定义函数及函数参数---day09
点击右上角即可分享
微信分享提示