我从一个旧的项目中获得了以下函数,并得到了这个错误
def haversine_distance((lat1,lon1),(lat2,lon2)):^ SyntaxError:无效语法
def haversine_distance((lat1, lon1), (lat2, lon2)):
"""
Haversine distance between two points, given by lon and lat in degrees.
"""
d_lat = radians(lat2 - lat1)
d_lon = radians(lon2 - lon1)
a = sin(d_lat / 2.0) ** 2 + \
cos(radians(lat1)) * cos(radians(lat2)) * \
sin(d_lon / 2.0) ** 2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
return R * c我很想知道如何将其转换为python3.8最佳实践。帮助
发布于 2020-09-11 12:02:41
在haversine_distance(p1, p2)中将您的函数定义为Python3,并在函数体中解压lat和lon。例如:
def haversine_distance(p1, p2):
"""
Haversine distance between two points, given by lon and lat in degrees.
"""
lat1, lon1 = p1
lat2, lon2 = p2
d_lat = radians(lat2 - lat1)
d_lon = radians(lon2 - lon1)
a = sin(d_lat / 2.0) ** 2 + \
cos(radians(lat1)) * cos(radians(lat2)) * \
sin(d_lon / 2.0) ** 2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
return R * c发布于 2020-09-11 12:16:25
扩展到@AndrejKesely应答,为了获得更易读的代码,我将定义一个带有lat和lon字段的名称元组lat。然后和他们一起工作
from collections import namedtuple
from math import radians, sin, cos, atan2, sqrt
Point = namedtuple('Point', 'lat, lon')
def haversine_distance(point1, point2):
"""
Haversine distance between two points, given by lon and lat in degrees.
"""
d_lat = radians(point2.lat - point1.lat)
d_lon = radians(point2.lon - point1.lon)
a = sin(d_lat / 2.0) ** 2 + cos(radians(point1.lat)) * cos(radians(point2.lat)) * sin(d_lon / 2.0) ** 2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
return R * c # assuming R is global constant
point1 = Point(42, 23)
point2 = Point(41, 23)
print(haversine_distance(point1, point2))https://stackoverflow.com/questions/63846644
复制相似问题