首页 > 解决方案 > Python 2 函数到 Python 3 的转换

问题描述

我从一个旧项目中获得了以下功能并收到此错误

def hasrsine_distance((lat1, lon1), (lat2, lon2)): ^ SyntaxError: invalid syntax

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

我很想知道将其转换为 python 3.8 最佳实践。帮助

标签: pythonpython-3.xpython-2.7

解决方案


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

推荐阅读