python functools.singledispatch的使用,针对函数不同的传参类型,做出不同的操作。

背景

希望函数根据传参类型不同,做出不同的操作.
根据传入变量的类型来判断需要输出的内容,常见的做法是把这个函数做成一个分派函数,在这个函数中通过大量的if/elif/else来判断条件然后来执行对应的操作。但是这样做不便于模块的拓展,而且还显得笨重,时间一长这个函数会显得很大.

实现

from functools import singledispatch
@singledispatch
def typecheck(a):
    print(a, type(a), 'a')


@typecheck.register(str)
def _(text):
    print(text, type(text), 'str')


@typecheck.register(list)
def _(text):
    print(text, type(text), 'list')

@typecheck.register(int)
def _(text):
    print(text, type(text), 'int')

if __name__ == '__main__':
    typecheck([1,2,3,4])


输出:

[1, 2, 3, 4] <class 'list'> list

学习地址

https://docs.python.org/zh-cn/3/library/functools.html
https://www.jianshu.com/p/33e1db06f2d5

posted @ 2023-01-29 11:23  Tarzen  阅读(51)  评论(0编辑  收藏  举报