Python 3.x 适应无默认值的empy函数参数
我正在用Python3.6编写一个简单的函数来计算n维空间中两点之间的距离。我将坐标作为一维列表传递给函数。以下是我写的:Python 3.x 适应无默认值的empy函数参数,python-3.x,Python 3.x,我正在用Python3.6编写一个简单的函数来计算n维空间中两点之间的距离。我将坐标作为一维列表传递给函数。以下是我写的: def Distance(a: list[float], b: list[float]): dimension = len(a) sum = 0 for i in range(dimension): sum += (b[i]-a[i])**2 return math.sqrt(sum) 如果a和b都被显式传递,这应该可以正常
def Distance(a: list[float], b: list[float]):
dimension = len(a)
sum = 0
for i in range(dimension):
sum += (b[i]-a[i])**2
return math.sqrt(sum)
如果a
和b
都被显式传递,这应该可以正常工作。但是我想添加额外的功能:如果只传递了a
,将计算它与原点的距离
<>在C++中,我最熟悉的语言,我会使用函数重载来做这个。在这种情况下,这两个函数的参数数量将不同。但在Python中,这不是我的选项
在此方面的任何帮助都将不胜感激。先谢谢你
编辑:
更新的定义
def Distance(a: List[float], b=None):
if b:
arg = sum((x1 - x2)**2 for x1, x2 in zip(a,b))
else:
arg = sum(x**2 for x in a)
return math.sqrt(arg)
这两种情况都适用。原型必须确实具有
None
,因此您必须更改函数类型,因为None
显然不是一个列表:
def Distance(a: list[float], b=None):
然后:
原型必须确实具有
None
,因此您必须更改函数类型,因为None
显然不是一个列表:
def Distance(a: list[float], b=None):
然后:
惯用的定义可以是
def distance(a, b=None):
from math import sqrt
d2=sum((x1-x2)**2 for x1,x2 in zip(a,b)) if b else sum(x**2 for x in a))
return sqrt(d2)
我相信也可以使用类型提示,但我不是专家
最后一句话,您使用了
sum
作为名称,但建议不要屏蔽内置名称(我在函数定义中使用了sum
内置名称)可以使用惯用定义
def distance(a, b=None):
from math import sqrt
d2=sum((x1-x2)**2 for x1,x2 in zip(a,b)) if b else sum(x**2 for x in a))
return sqrt(d2)
我相信也可以使用类型提示,但我不是专家
最后一句话,您使用了
sum
作为名称,但建议您不要屏蔽内置名称(我在函数定义中使用了sum
builtin)这将适用于距离原点的距离,但对于第一种情况,如果我确实希望传递两个非零坐标,该怎么办?解释器不反对将列表作为第二个参数传递给具有此定义的函数吗?不,为什么会有问题?我们不把它限制为任何类型。这对于距离原点的距离是有效的,但是对于第一种情况,我确实想要传递两个非零坐标,那又如何呢?解释器不反对将列表作为第二个参数传递给具有此定义的函数吗?不,为什么会有问题?我们没有将其限制为任何类型。