Имена функций генератора Python - это префикс полезной? [закрыто
-
26-09-2019 - |
Вопрос
Большинство функций легко назвать. Как правило, имя функции основано на том, что он делает или тип результата, который он производит.
Однако в случае функции генератора результат может быть нерешеным в течение некоторых других типов.
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
Из имени функции и вместо этого выберите имя, которое подчеркивает то, что он делает, а не типы.