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