没有类的重载[重复]
Posted
技术标签:
【中文标题】没有类的重载[重复]【英文标题】:Overloading without classes [duplicate] 【发布时间】:2021-02-01 08:52:25 【问题描述】:如何在 python 中编写多个具有相同名称和不同数量参数的函数,以便函数执行由参数数量决定? 我在 Python 中执行以下程序时出错
def area(r):
a=3.14*r*r
return a
def area(l,b):
a=l*b
return a
print(area(710))
print(area(6,2))
【问题讨论】:
def area(x, y=None):
?在一般情况下,这是“多次调度”,您可以使用像 pythonhosted.org/multidispatch 这样的库。
这能回答你的问题吗? How do I use method overloading in Python?
你想说的和我问的在某种程度上不同
【参考方案1】:
在 python 中,函数重载是通过为参数提供默认值来完成的 例如,您可以在这里做的是为参数 b 提供一个默认值(可能是“无”),并相应地更改函数的其余部分
def area(a, b=None):
if b:
ans = a*b
else:
ans = (a*a)*3.14
return ans
如果你提供2个参数,这个函数可以工作,输出将是矩形的面积,或者如果你只给它一个参数,它会返回一个圆的面积
【讨论】:
我写的程序,我在 Unacademy 上看到的。它是由它的一位老师写的。它对她有用,但是当我为我使用它时,它显示错误。你能解释一下我是否执行我提到的程序? “它对她有用” - 无法复制。 如果我正确理解了您的问题,现在您只需要像这样调用此函数print(area(720))
或 print(area(6,2))
即可打印 1 或 2 个参数的答案。如果你的意思是别的,请纠正我
unacademy.com/lesson/…是我看到的视频的链接。节目在1:44到3:05之间
@Ash 我刚刚检查了你在说什么,我也觉得它应该可以工作,但它也给了我一个 TypeError。我无法告诉你为什么它不起作用,但我认为我在这里向你展示的方法是在 python 中重载的更好选择。【参考方案2】:
我认为这是一个拆包的用例。
def area(*values):
if len(values) == 1:
r = values[0]
return 3.14 * r ** 2
if len(values) == 2:
l, b = values
return l * b
raise ValueError("Takes only one or two arguments.")
在本例中,两个星号表示values
将采用所有 位置参数传递给area
。所以,如果你调用area(1)
,values
将是[1]
,如果你调用area(1, 2, 3, 4)
,values
将是[1, 2, 3, 4]
,等等。因此,您可以通过检查列表的长度来检查传递给函数的参数数量。但是,注意不要过度使用它,它会使代码有点混乱......
【讨论】:
以上是关于没有类的重载[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何从同一个类中的另一个构造函数调用抽象类的构造函数(方法重载)[重复]