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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原文地址:https://www.cnblogs.com/hanzeng1993/p/12195044.html