我们先说overload 重载。
在Java中,支持重载,重载的意思是能够定义有相同方法名的方法,传入方法中的参数个数,或者参数类型不同。比如:
int mymethod(int a, int b)
int mymethod(int num)
float mymethod(int a, float b)
float mymethod(float var1, int var2)
int mymethod(int a, int b)
int mymethod(float var1, float var2)
如下的例子是错误的,因为传入的参数个数相同,类型相同,仅仅给了一个不同的命名并不改变具体的方法。
int mymethod(int a, int b, float c)
int mymethod(int var1, int var2, float var3)
那么对于python,我们也可以写出这样的方法,举例来说明为什么python不支持overload
def sum(a,b):
return a+b
def sum(a,b,c):
return a+b+c
上述的方法,如果python支持overload,我们运行两个不同的sum方法的时候,会得到不同的结果
print sum(1,2)
print sum(1,2,3)
# result
TypeError: sum() takes exactly 3 arguments (2 given)
当我们想调用第一个sum方法的时候报错。这是因为python不支持overload,第二个同名的方法会覆盖overwrite第一个方法。
所以,当我们想在python中运用类似overload的技巧的时候,更多的我们会使用
default argument values
def ask_ok(prompt, retries=4, complaint='Yes or no, please!')
你可以调用这个方法,传入不同个数的参数
ask_ok('Do you really want to quit?')
ask_ok('OK to overwrite the file?', 2)
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
keyword arguments
def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
如果使用的keyword赋值,那么不需要按照顺序传入参数
parrot(1000) # 1 positional argument
parrot(voltage=1000) # 1 keyword argument
parrot(voltage=10000