Имена функций генератора Python - это префикс полезной? [закрыто

StackOverflow https://stackoverflow.com/questions/4215906

Вопрос

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

Однако в случае функции генератора результат может быть нерешеным в течение некоторых других типов.

def sometype( iterable ):
    for x in iterable:
        yield some_transformation( x )

То sometype Название считается вводящим в заблуждение, поскольку функция не возвращает объект именованного типа. Это действительно с намерением sometype.

Имя вроде iter_sometype или gen_sometype чувствует себя слишком много, как Венгерская обозначение. Отказ Однако, похоже, уточняет намерение функции.

Сдвиньте дальше, существует ряд более специализированных случаев, когда префикс может быть полезен. Это типичные примеры, некоторые из которых доступны в Itertools. Отказ Тем не менее, нам часто приходится писать версию, которая получила некоторую алгоритмическую сложность, которая делает его похожим на itertools, но не идеальная посадка.

def reduce_sometype( iterable ):
    summary = sometype()
    for x in iterable:
         if some_rule(x): 
             yield summary
             summary= sometype()
         summary.update( x )

 def map_sometype( iterable ):
     for x in iterable:
         yield some_complex_mapping( x )

 def filter_sometype( iterable ):
     for x in iterable:
         if some_complex_rule(x):
              yield x

Делает iter_, map_, reduce_, filter_ Префикс поможет уточнить имя функции генератора? Или это просто визуальный беспорядок?

Если префикс полезен, какие префикс предложения у вас есть?

В качестве альтернативы, если суффикс полезен, какие предложения суффикс у вас есть?

Это было полезно?

Решение

Питон dicts имеют iter* методы. И деревья LXML также имеют iter метод. Чтение

for node in doc.iter():

кажется знакомым, поэтому после этого шаблона я бы рассмотрел название генератора тьма sometypes_iterтак что я мог бы написать анализорудно,

for item in sometypes_iter():

Python предоставляет А. sorted функция. После этого шаблона я мог бы сделать глагольные функции прошедшего времени:

sometypes_reduced
sometypes_mapped
sometypes_filtered

Если у вас есть достаточно этих функций, это может иметь смысл сделать SomeTypes класс, поэтому имена методов могут быть сокращены до reduce, map, а также filter.

Если функции могут быть обобщены для принятия или возвратных типов, кроме sometype, тогда, конечно, это имеет смысл удалить sometype Из имени функции и вместо этого выберите имя, которое подчеркивает то, что он делает, а не типы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top