泛型

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

一、单分派泛函数

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

 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日

相关文章

  • 迭代器执行切片

    普通的切片对迭代器无法实行切片操作 1 from itertools import islice 2 3 4 def func(): 5 for i in [4, 9, 6, 2]: 6 if i % 2 == 0: 7 yield i 8 9 10 f = func() 11 res = islice(f, 3) 12 for i in res: 13 p…

    Python开发 2023年4月2日
    00
  • 装饰器的多种实现方式

    一、基于函数实现   1、嵌套函数   代码实现: 1 from functools import wraps 2 3 4 def decorator(param): 5 def wrapper(func): 6 @wraps(func) 7 def verify(*args, **kwargs): 8 if param == ‘g’: 9 print(“&…

    Python开发 2023年4月2日
    00
  • fastapi篇(一)

    fastapi是一个高性能的web开发框架 性能极高,可与 NodeJS, Go 媲美。(得益于Starlette和Pydantic)。 Starlette 是一个轻量级 ASGI 框架/工具包。它非常适合用来构建高性能的 asyncio 服务,并支持 HTTP 和 WebSockets。 官方网址:https://www.starlette.io/   P…

    python 2023年5月9日
    00
  • 工匠回忆(三)

    接上文 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
  • 比较赋值、浅拷贝、深拷贝

    1、无论是浅拷贝还是深拷贝,拷贝对象后是否会开辟新内存,取决于被拷贝对象的数据类型是否可变,一般来讲,可变的数据类型会开辟新内存,不可变数据类型反之不会开辟新内存,进行内存地址的引用(-5-256以外的大整数池会开辟内存,注:但我本地进行测试比较内存还是一样的,有问题) 2、要在单层、嵌套型对象中逐一比较拷贝 3、浅拷贝和深拷贝的区别主要体现在对嵌套型结构的…

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

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

    Python开发 2023年4月2日
    00
  • 猴子补丁

    作用:随时修改代码   (在函数或类定义完成之后,再去修改函数的实现过程) “””类似猴子补丁在函数定义好之后,再去更改他的行为”””import typesclass Valley: def func(self): return “等待宣告”def common(self): return “只有永不遏制的奋斗”if __name__ == ‘__main…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部