“лямбда” по сравнению с “operator.attrgetter ('xxx')” как функция ключа сортировки

Я смотрю на некоторый код, который имеет много вида, вызывает функции сравнения использования, и кажется, что он должен использовать ключевые функции.

Если необходимо было измениться seq.sort(lambda x,y: cmp(x.xxx, y.xxx)), который предпочтителен:

seq.sort(key=operator.attrgetter('xxx'))

или:

seq.sort(key=lambda a:a.xxx)

Я также интересовался бы комментариями к достоинствам внести изменения в существующий код, который работает.

28
задан martineau 12 August 2019 в 16:56
поделиться

1 ответ

Как указано предыдущими комментаторами, attrgetter немного быстрее, но для большого количества ситуаций различие является крайним (~microseconds).

Относительно удобочитаемости, я лично предпочитаю lambda, поскольку это - конструкция, которую люди будут видеть прежде в различных контекстах, таким образом, для других, вероятно, будет легче читать и понять.

Еще один протест состоит в том, что Ваш IDE должен быть в состоянии сигнализировать об опечатке на имени attr при использовании lambda, в отличие от использования attrgetter.

В целом я склонен выбирать конструкцию, которая не требует дополнительного импорта, если альтернативу достаточно легко записать и читать.

4
ответ дан 28 November 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: