单分发器与泛型函数
泛型函数是指由一组为不同类型参数执行相似操作地点函数组成的函数,具体调用哪一个函数的实现取决于分发算法和参数类型。
Python 单分发器是实现泛型函数的一种形式,由一个单一参数来决定选择和调用哪个函数。
>>> from functools import singledispatch
>>> @singledispatch
... def fun(arg, verbose=False):
... if verbose:
... print('Let me just say,',end=' ')
... print(arg)
...
>>> @fun.register(int)
... def _(arg,verbose=False):
... if verbose:
... print('Strength in numbers',end=' ')
... print(arg)
...
>>> @fun.register(int)
... def fun_num(arg,verbose=False):
... if verbose:
... print('Half of your number is:',end=' ')
... print(arg/2)
...
>>> @fun.register(tuple)
... @fun.register(list)
... def _(arg, verbose=False):
File "<stdin>", line 3
def _(arg, verbose=False):
^
SyntaxError: invalid character in identifier
>>> @fun.register(list)
... @fun.register(tuple)
... def _(arg, verbose=False):
... if verbose:
... print('Enumerate this')
... for i,v in enumerate(arg):
... print(i,v)
...
>>> fun('Hello world')
Hello world
>>> fun('Hello world.',True)
Let me just say, Hello world.
>>> fun(11,True)
Half of your number is: 5.5
>>> def doNothing(arg, verbose=False):
... print('Nothing to do.')
...
>>> fun.register(type(None),doNothing)
>>> fun(None)
Nothing to do.