zoukankan      html  css  js  c++  java
  • 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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    java file文件类操作使用方法大全
    java 中可以在方法中 新建 方法吗
    java InputStream读取数据问题
    file 创建方法
    java中File类的使用方法
    jquery怎么获取radio的值
    //初始化无限滚动分页组件
    表单提交 封装成json格式
    几个常用EL表达式的用法
    简单的顺序队列
  • 原文地址:https://www.cnblogs.com/hanzeng1993/p/12195044.html
Copyright © 2011-2022 走看看