import functools functools.cmp_to_key(func)
func
- пользовательская функция сравнения.Класс cmp_to_key()
модуля functools
преобразует функцию сравнения старого стиля в ключевую функцию сравнения.
Используется с инструментами, которые принимают в качестве ключа сортировки функцию, такие как sorted()
, min()
, max()
, heapq.nlargest()
, heapq.nsmallest()
, itertools.groupby()
. Эта функция в основном используется в качестве инструмента перехода для программ, конвертируемых из Python 2.
Функция сравнения - это любой вызываемый объект, который принимает два аргумента, сравнивает их и возвращает отрицательное число для "меньше чем", ноль для равенства значений и положительное число для "больше чем". Функция, используемая в качестве ключа - это вызываемый объект, который принимает один аргумент и возвращает другое значение, которое будет использоваться в качестве ключа сортировки.
В Python 2.4 или более ранних версий, встроенной функции sorted()
не было, а list.sort()
не принимал аргументов с ключевыми словами. Вместо этого, все версии Py2.x поддерживали параметр cmp
для обработки пользовательских функций сравнения.
В Py3.0 параметр cmp
был полностью удален для упрощения и унификации языка, устраняя конфликт между богатыми сравнениями и магическим методом __cmp__()
.
В Py2.x сортировка допускает необязательную функцию, которую можно вызывать для сравнения. Эта функция должна принимать два аргумента для сравнения и затем возвращать отрицательное значение для "меньше чем", возвращать ноль, если они равны и возвращать положительное значение для "больше чем".
from functools import cmp_to_key import locale # locale-aware sort order new_iterable = sorted(iterable, key=cmp_to_key(locale.strcoll))
Примеры сортировки смотрите в описании встроенной функции sorted()
.