#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 не сбой, как написано в настоящее время, поэтому более простая проверка должна быть адекватной. Поскольку я сказал «эквивалентно», я думаю, мне не следовало брать на себя такую вольность, поэтому я изменил ответ по вашему предложению. Спасибо.