I
IT Аналитика
@it_analytic104 подп.
124просмотров
2 августа 2023 г.
Score: 136
Использование параметра cmp Все версии Python 2.x поддерживали параметр cmp для обработки пользовательских функций сравнения. В Python 3.0 от этого параметра полностью избавились. В Python 2.x в sort() можно было передать функцию, которая использовалась бы для сравнения элементов. Она должна принимать два аргумента и возвращать отрицательное значение для случая «меньше чем», положительное — для «больше чем» и ноль, если они равны: >>> def numeric_compare(x, y): return x - y >>> sorted([5, 2, 4, 1, 3], cmp=numeric_compare) [1, 2, 3, 4, 5] Можно сравнивать в обратном порядке: >>> def reverse_numeric(x, y): return y - x >>> sorted([5, 2, 4, 1, 3], cmp=reverse_numeric) [5, 4, 3, 2, 1] При портировании кода с версии 2.x на 3.x может возникнуть ситуация, когда нужно преобразовать пользовательскую функцию для сравнения в функцию-ключ. Следующая обёртка упрощает эту задачу: def cmp_to_key(mycmp): 'Перевести cmp=функция в key=функция' class K(object): def init(self, obj, *args): self.obj = obj def lt(self, other): return mycmp(self.obj, other.obj) < 0 def gt(self, other): return mycmp(self.obj, other.obj) > 0 def eq(self, other): return mycmp(self.obj, other.obj) == 0 def le(self, other): return mycmp(self.obj, other.obj) <= 0 def ge(self, other): return mycmp(self.obj, other.obj) >= 0 def ne(self, other): return mycmp(self.obj, other.obj) != 0 return K Чтобы произвести преобразование, оберните старую функцию: >>> sorted([5, 2, 4, 1, 3], key=cmp_to_key(reverse_numeric)) [5, 4, 3, 2, 1] В Python 2.7 функция cmp_to_key() была добавлена в модуль functools. IT Аналитика
124
просмотров
1770
символов
Нет
эмодзи
Нет
медиа

Другие посты @it_analytic

Все посты канала →