python functools.singledispatch

使用场景描述

当有这样的一个函数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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自www.cnblogs.com/hanzeng1993/p/12195044.html