Обновление Python 3

#python

#python

Вопрос:

Я не программист на 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()
  

Спасибо за любую помощь.

Ответ №1:

Эквивалентный sorted() вызов, который работает в Python 3, является:

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

Комментарии:

1. Это не эквивалентно без is not None части, если datalink может принимать ложные значения, которые не None являются . Конечно, маловероятный сценарий, но его стоит отметить.

2. Я думал об этом, но если появится такое ложное значение, тогда исходный код будет генерировать исключение, поскольку это значение не будет чем-то с target атрибутом. Я предполагаю, что код OPs не сбой, как написано в настоящее время, поэтому более простая проверка должна быть адекватной. Поскольку я сказал «эквивалентно», я думаю, мне не следовало брать на себя такую вольность, поэтому я изменил ответ по вашему предложению. Спасибо.