【问题标题】:Python 3 upgradingPython 3 升级
【发布时间】:2021-01-06 20:38:34
【问题描述】:

我不是python程序员,所以来这里..

我知道 cmp 在 python3 中已被贬值,我正在尝试将此 python 2 代码迁移到 python3,我将不胜感激。

def get_datalink_points( drivers ):
points = []
for driver in drivers:
    points += driver.points

def compare_datalink_target( a, b ):
    target_a = target_b = ''
    if a.datalink is not None:
        target_a = a.datalink.target
    if b.datalink is not None:
        target_b = b.datalink.target
    return cmp( target_a, target_b )

return sorted( points, cmp = compare_datalink_target )

此代码当前生成以下错误:

Exception Type:     TypeError
Exception Value:    'cmp' is an invalid keyword argument for sort()

感谢您的帮助。

【问题讨论】:

    标签: python


    【解决方案1】:

    在 Python 3 中工作的等效 sorted() 调用是:

    return sorted( points, key=lambda x: x.datalink.target if x.datalink is not None else '' )
    

    【讨论】:

    • 如果datalink 可以采用不是None 的虚假值,那么如果没有is not None 部分,这将是不等价的。当然,这是一种不太可能发生的情况,但值得注意。
    • 我想到了这一点,但如果出现这样一个虚假的值,那么原始代码将引发异常,因为该值不会是具有target 属性的值。我假设 OPs 代码没有像当前编写的那样崩溃,所以更简单的检查应该足够了。既然我确实说“等效”,我想我不应该冒昧,所以我根据你的建议改变了答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 2019-08-13
    • 1970-01-01
    • 2019-03-20
    • 2017-09-06
    • 2010-09-05
    • 2017-01-24
    • 1970-01-01
    相关资源
    最近更新 更多