如何在Python中进行函数重载
在Python中,您可以定义一个方法,以便有多种调用方式。根据函数定义,它可以使用零个、一个、两个或多个参数进行调用。这称为方法重载。
在给定的代码中,有一个类一个方法,sayHello()。我们如下所示重新编写。将该方法的第一个参数设置为None,这样我们就可以选择带或不带参数来调用它。
基于该类创建了一个对象,并且我们使用零个和一个参数调用其方法。为了实现方法重载,我们通过两种方式调用sayHello()方法:1. obj.sayHello() 和 2. obj.sayHello(’Rambo’)
我们创建了一个可以使用比定义允许的更少参数调用的方法。我们不限于两个变量,给定的方法可以有更多的可选变量。
class Human:
def sayHello(self, name=None):
if name is not None:
print ('Hello ' + name)
else:
print ('Hello ')
obj = Human()
print(obj.sayHello())
print(obj.sayHello('Rambo'))
上述代码将产生以下输出
Hello
None
Hello Rambo
None
在Python中,不支持本地函数重载,就像其他编程语言(例如Java或C ++)一样。但是,我们可以使用默认参数和/或可变长度参数来实现相同的效果。
举个例子
下面是一个使用默认参数的例子:
在此示例中,函数“add”可以采用两个或三个参数。如果只传递一个参数,则它将被分配值“a”,而另外两个参数将取其默认值0。如果传递了两个参数,则它们将分配给a和b,并且c将取其默认值。如果传递了所有三个参数,则它们将分配给a、b和c。
def add(a, b=0, c=0):
return a + b + c
print(add(2))
上述代码将产生以下输出
2
def add(a, b=0, c=0):
return a + b + c
print(add(3,2))
上述代码将产生以下输出
5
def add(a, b=0, c=0):
return a + b + c
print(add(1,4,3))
上述代码将产生以下输出
8
举个例子
在Python中的另一种实现函数重载的方法是使用可变长度参数。这里是一个例子:
def add(*args):
result = 0
for arg in args:
result += arg
return result
print(add(1,2,3))
上述代码将产生以下输出
6
def add(*args):
result = 0
for arg in args:
result += arg
return result
print(add(1,3,4,5))
上述代码将产生以下输出
13
在此示例中,函数add接受可变数量的参数。所有参数都打包到名为args的元组中,函数将该元组中所有值相加并返回结果。
通过使用默认参数和可变长度参数,我们可以创建根据传递给它们的参数的数量和类型而表现不同的函数,这是函数重载的精髓。
举个例子
使用不同参数类型对函数进行重载。
在本例中,将函数multiply重载以接受两种不同类型的参数:int和float。函数检查参数的类型,并仅在它们相同时执行乘法。如果类型不同,则函数返回错误消息。
def multiply(a, b):
if isinstance(a, int) and isinstance(b, int):
return a * b
elif isinstance(a, float) and isinstance(b, float):
return a * b
else:
return "Invalid argument types"
print(multiply(2, 3))
上述代码将产生以下输出
6
def multiply(a, b):
if isinstance(a, int) and isinstance(b, int):
return a * b
elif isinstance(a, float) and isinstance(b, float):
return a * b
else:
return "Invalid argument types"
print(multiply(2.5, 3.5))
上述代码将产生以下输出
8.75
def multiply(a, b):
if isinstance(a, int) and isinstance(b, int):
return a * b
elif isinstance(a, float) and isinstance(b, float):
return a * b
else:
return "Invalid argument types"
print(multiply(2, 3.5))
上述代码将产生以下输出
Invalid argument types
举个例子
使用不同数量的参数对函数进行重载。
在本例中,函数add用两个不同数量的参数进行了重载。但是,Python不允许仅基于参数数量的函数重载,而第二个add定义将覆盖第一个add。因此,当我们尝试仅使用两个参数调用add时,我们会得到一个TypeError,因为函数期望三个参数。
def add(a, b):
return a + b
def add(a, b, c):
return a + b + c
print(add(2, 3))
上述代码将产生以下输出
Traceback (most recent call last):
File "/home/cg/root/16391/main.py", line 6, in
print(add(2, 3))
TypeError: add() missing 1 required positional argument: 'c'
def add(a, b):
return a + b
def add(a, b, c):
return a + b + c
print(add(2,3,4))
上述代码将产生以下输出
9
因此,在本文中,我们已经看到了在Python中实现函数重载的不同方法。