函数重载?简单的理解,支持多个同名函数的定义,只是参数的个数或者类型不同,在调用的时候,解释器会根据参数的个数或者类型,调用相应的函数。
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)
ErrorPython 要实现类似的功能,可以借助 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
















