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 传参的时候会根据传入的参数判断要输出的内容

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 要点: 函数式编程:注意不是“函数编程”,多了一个“式” 模块:如何使用模块 面向对象编程:面向对象的概念、属性、...
    victorsungo阅读 5,546评论 0 6
  • 以前,遇到乞丐我就会给钱,后来遇到相同的面孔太多了,我也就麻木了,不再想给了,因为我觉得我暖不了他们一辈子。 从此...
    浅浅的笺阅读 1,535评论 0 1
  • 【被花恼•桃之再生】 寻寻觅觅护花人,何处现摘花手? 莫问折花买新酒。 蜂蝶势利,光阴寸断,琥珀胶衰朽。 新燕远,...
    士儿阅读 3,325评论 0 1
  • 二爷seve7n 大部分人对所谓成功,只有两种标准:小时候的分数和长大之后的钱数。 现实生活中,人们总喜欢...
    二爷小时候可瘦了阅读 2,948评论 0 0
  • 这两天,我所在的一个家长群里热闹极了。 这个群里的家长都面临了一个大问题,孩子即将从幼儿园升到小学。大家就幼小衔接...
    心理枭课堂阅读 5,084评论 0 1

友情链接更多精彩内容