Имя функции, возвращающей генератор
Как вы называете функцию, которая возвращает генератор (т.е. использует 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 символов)