背景
希望函数根据传参类型不同,做出不同的操作.
根据传入变量的类型来判断需要输出的内容,常见的做法是把这个函数做成一个分派函数,在这个函数中通过大量的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