使用场景描述
当有这样的一个函数sort_type需要根据传入变量的类型来判断需要输出的内容,常见的做法是把这个函数做成一个分派函数,在这个函数中通过大量的if/elif/else来判断条件然后来执行对应的操作。但是这样做不便于模块的拓展,而且还显得笨重,时间一长这个函数会显得很大。为了解决这个问题,我们本文的猪脚出场了-- functools.singledispatch 出场了下面介绍其用法
functools.singledispatch使用
functools.singledispatch
是作为装饰器来使用的,他可以把整体方案拆分成,多个小的模块,甚至可以为你无法修改的类提供专门的函数。使用 @singledispatch 装饰的普通函
数会变成泛函数(generic function):根据第一个参数的类型,以不同方式执行相同操作的一组函数
from functools import singledispatch
import numbers
@singledispatch
def sort_type(obj):
print(obj, type(obj), 'obj')
@sort_type.register(str)
def _(text):
print(text, type(text), 'str')
@sort_type.register(numbers.Integral)
def _(n):
print(n, type(n), 'int')
运行结果
(Pdb) sort_type('aaaa')
aaaa <class 'str'> str
(Pdb) sort_type(222222)
222222 <class 'int'> int
(Pdb) sort_type(list)
<class 'list'> <class 'type'> obj
上边以的 _ 函数都注册到了sort_type 这个函数上,然后当给sort_type 传参的时候会根据传入的参数判断要输出的内容
作者:五知小白羊
链接:https://www.jianshu.com/p/33e1db06f2d5
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。