我正在python 3.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
都被显式传递,那么这应该可以正常工作。但我想添加其他功能:如果仅传递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)
适用于两种情况。
答案 0 :(得分:1)
原型确实必须具有None
,因此您必须更改函数类型,因为None
显然不是列表:
def Distance(a: list[float], b=None):
然后:
if not b:
b = [0.] * dimension
答案 1 :(得分:1)
惯用的定义可能是
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
内置)