泛型

第一个参数类型决定执行特定的方法体

一、单分派泛函数

  只对函数的第一个参数做类型检查,发现局限性太大,没什么特别的应用场景,也可能是我没用到

 1 from functools import singledispatch
 2 
 3 
 4 @singledispatch
 5 def func(a, *args):
 6     raise TypeError("暂不支持{}类型的执行".format(type(a)))
 7 
 8 
 9 @func.register(int)
10 def _(a, *args):
11     print(">>【{}】是整数".format(a))
12     return a + args[0]
13 
14 
15 @func.register(str)
16 def _(a, *args):
17     print(">>【{}】是字符串".format(a))
18     return a + args[0]
19 
20 
21 if __name__ == '__main__':
22     print(func(4, 5))
23     print(func("只有", ""))
24     print(func([1, 2], 3))

二、多分派泛函数

  对第一个参数以外的参数也做类型检查,保证参数类型一致性

 1 from functools import singledispatch
 2 
 3 
 4 @singledispatch
 5 def func(a, *args):
 6     raise TypeError("暂不支持{}类型的执行".format(type(a)))
 7 
 8 
 9 @func.register(int)
10 @func.register(str)
11 def _(a, *args):
12     print(">>【{}】类型检查通过".format(a))
13     if not isinstance(args[0], type(a)):
14         raise TypeError(">>【{}】类型应为【{}】".format(args[0], type(a)))
15     print(">>【{}】类型检查通过".format(args[0]))
16     return a + args[0]
17 
18 
19 if __name__ == '__main__':
20     print(func(4, 5))
21     print(func("只有", ""))
22     print(func(4, "测试"))

output:

  >>【4】类型检查通过
  >>【5】类型检查通过
  9
  >>【只有】类型检查通过
  >>【永】类型检查通过
  只有永
  >>【4】类型检查通过

  TypeError: >>【测试】类型应为【<class 'int'>】

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:泛型 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 工匠回忆(三)

    接上文 7、函数   7.1、长度   7.2、圈复杂度   7.3、函数内代码确保处在同一抽象层内,主流程清晰,不存在穿插的分支   7.4、有状态的函数     7.4.1、全局变量     7.4.2、闭包函数     7.4.3、类     比较偏向于后两者   8、装饰器   装饰器和装饰器模式是两个完全不同的概念   1、三方模块wrapt的引入…

    python 2023年5月6日
    00
  • 线程锁在单例模式中的应用

    多个线程在执行过程中会因为竞争同一个资源而产生线程冲突,造成死锁,从而引出线程锁这个概念 先拿到锁再执行业务操作: 当然我对这一块了解的还不透彻,只是了解在不加锁的多线程情况下,会破坏单例模式,所以就有了下面这一段 1 import time 2 import threading 3 4 5 def decorator(func): 6 lock = thr…

    Python开发 2023年4月2日
    00
  • __call__用法简谈

      python一切皆对象,从是否可调用层面讲,对象又可以分为可调用对象、不可调用对象 在本篇中,类中实现__call__双下方法,即将该类的实例变为可调用对象   普通类未实现__call__的方法,实例是不可调用的,先看 1 class Valley: 2 … 3 4 5 if __name__ == ‘__main__’: 6 v = Valley…

    Python开发 2023年4月2日
    00
  • pyqt入门

      第一次接触pyqt是在20年刚毕业的时候,时隔两年,恰逢闲暇,正好回过头来对这个模块的知识进行一个整理,不会做系统化的整理,我打算可能会围绕之前做过的小工具对其涉及到的控件、信号和槽等知识进行简单的回忆。后面工作如果再涉及或者想到其他的,会再回来更新完善。   pyqt5:同前面整理的kivy一样,同属于GUI开发框架的范畴,不同的是,pyqt用于桌面应…

    2023年4月2日
    00
  • 命名元组

    1、命名元组也叫具名元组   可以通过名称来访问序列中的元素,摆脱对位置的依赖,他本身是一个工厂函数 2、应用1   实例化元组返回的类,其内存占用要比普通类实例要小的多,因为前者实例的属性不通过字典进行管理 1 from collections import namedtuple 2 3 # 返回可实例化的类 4 P = namedtuple(“人”, […

    Python开发 2023年4月2日
    00
  • 钩子函数

    控制子类的的创建 1、元类   这种方式可能是最常见的也是我们最先知晓的,当然这种方式可能需要我们对元类有比较深入的了解,所以引入了下面的这种方式 2、钩子函数   __init__subclass__,字面意思,父类实现了该双下方法,其后凡是继承他的派生类,都会触发此方法,进行派生类的初始化,实现派生类属性的增加及修改 1 class Meta: 2 de…

    Python开发 2023年4月2日
    00
  • 多组合少继承

    继承:   强调类与类之间的关系 组合:   强调对象和对象之间的关系 清楚python支持多继承,从而涉及到一些MRO的点,这里不做赘述,在实际工作过程中,我们经常会使用继承来实现代码复用,如果仅仅是为了复用,还是比较推荐使用组合方式,因为继承方式,使得类与类之间的耦合性变得异常紧密,这多少违背了迪米特法则 1 “”” 2 OOP中三大特性之一:继承 3 …

    Python开发 2023年4月2日
    00
  • 工匠回忆(二)

    接上文 4、条件分支控制流   避免分支嵌套,异常放在代码片段最前面   4.1、归约函数   4.2、条件表达式的封装避免过长而导致可读性下降   4.3、德摩根定律   4.4、and、or优先级   4.5、or短路效应   4.6、消失的分支     4.6.1、二分查找算法     4.6.2、字典算法   5、异常错误处理   无需多言   6、…

    python 2023年5月4日
    00
合作推广
合作推广
分享本页
返回顶部