python函数重载

函数重载?简单的理解,支持多个同名函数的定义,只是参数的个数或者类型不同,在调用的时候,解释器会根据参数的个数或者类型,调用相应的函数。

Python 函数的形参十分灵活,我们可以只定义一个函数来实现相同的功能,就像这样

>>> def func(*args):
...   if len(args) == 1:
...     print('One parameter')
...   elif len(args) == 2:
...     print('Two parameters')
...   elif len(args) == 3:
...     print('Three parameters')
...   else:
...     print('Error')
... 
>>> func(1)
One parameter
>>> func(1, 2)
Two parameters
>>> func(1, 2, 3)
Three parameters
>>> func(1, 2, 3, 4)
Error

Python 要实现类似的功能,可以借助 functools.singledispatch 装饰器

from functools import singledispatch
 
@singledispatch
def func(a):
    print(f'Other: {a}')
 
@func.register(int)
def _(a):
    print(f'Int: {a}')
 
@func.register(float)
def _(a):
    print(f'Float: {a}')
 
if __name__ == '__main__':
    func('zzz')
    func(1)
    func(1.2)
Other: zzz
Int: 1
Float: 1.2

需要注意的是,这种方式只能够根据第一个参数的类型去确定最后调用的函数。

关于 singledispatch 的更多细节请看官方文档

https://docs.python.org/3.6/library/functools.html#functools.singledispatch

posted @ 2020-03-02 01:16  腹肌猿  阅读(328)  评论(0编辑  收藏  举报