Имя функции, возвращающей генератор

Как вы называете функцию, которая возвращает генератор (т.е. использует yield foo вместо return foo)?

  • Это определенно не getFoo(), потому что он не возвращает значение Foo.
  • Вероятно, это не foos(), потому что я бы предпочел бы простой для распознавания префикс.
  • Вероятно, это не точно listFoo(), потому что он не возвращает list.
  • Вероятно, это не iterateFoo(), потому что этот префикс слишком длинный.

Какое ваше предпочтительное решение?

Update:

Хотя foos() может быть идеальным решением в некоторых случаях, обратите внимание, как имена методов обычно начинаются с глагола. Глагол передает идею о том, что это метод, а не поле данных, и, таким образом, помогает читабельности. Если возможно, я бы предпочел решение, которое упростило бы передачу метода из поля данных.

Ответы

Ответ 1

Некоторые краткие предложения:

getFoos()
generateFoos()
yieldFoos()
allFoos()

Поскольку вам обычно не нужен генератор, чтобы просто получить все ваши foos, довольно часто для конкретной функции генератора предлагается более интересное имя:

getActiveFoos()
getGreenFoos()
getFoosMatchingCriteria(someCriteria)
getFoosOverTheNetworkIfTheDatabaseIsntBeingAJerkface()

Ответ 2

Я думаю, что foo или foos - это возможности. Или, чтобы имитировать Python2 dicts 'iteritems, вы можете использовать iterfoo.

Ответ 3

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

Тип возвращаемого значения должен быть документирован в комментариях или в docstring, но я бы предположил, что для имени лучше всего использовать foos(), getfoos() или get_foos().

Если вы хотите, чтобы было очевидно, что это генератор, я бы предложил iterfoos() для его сходства с методами Python 2 dict, такими как itervalues().

Имейте в виду, что многие встроенные функции, используемые для возврата списков, теперь являются генераторами в Python 3 (map(), dict.values() и т.д.), поэтому никого не должно удивлять, когда ваши функции, возвращающие последовательность, являются генераторами даже если вы не назовете его generate_foos() или некоторые другие варианты.

Ответ 4

Наиболее точным будет:

iterateFoo()
iterate_foo()
iter_foo()
iterFoo()

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

Ответ 5

genFoo()

(... и некоторые дополнительные слова гарантируют, что это решение имеет не менее 30 символов)