В Python частичное применение функции (каррирование) по сравнению с явным определением функции

В Python считается лучшим стилем:

  • явно определять полезные функции в терминах более общих, возможно, внутреннего использования, функций; или,
  • использовать частичное приложение функции для явного описания каррирования функции?

Я объясню свой вопрос на надуманном примере.

Предположим, кто-то пишет функцию _sort_by_scoring, которая принимает два аргумента: функцию оценки и список предметов. Он возвращает копию исходного списка, отсортированную по баллам на основе положения каждого элемента в исходном списке. Также предоставляются два примера функций оценки.

def _sort_by_score(scoring, items_list):
    unsorted_scored_list = [(scoring(len(items_list), item_position), item) for item_position, item in enumerate(items_list)]
    sorted_list = [item for score, item in sorted(unsorted_scored_list)]
    return sorted_list

def _identity_scoring(items_list_size, item_position):
    return item_position

def _reversed_scoring(items_list_size, item_position):
    return items_list_size - item_position

Функция _sort_by_score никогда не вызывается напрямую; вместо,

Какой из двух стилей предпочтительнее для определения «полезных» функций? Существуют ли другие стили, которые более идиоматичны / Pythonic / и т. Д.?

16
задан duplode 5 November 2016 в 20:01
поделиться