Я часто нахожу, что предпочел бы написать выражение генератора (например, вместо создания пустого списка и добавления к нему).Тем не менее, это означает, что мне нужно поместить выражение в функцию, чтобы вызвать его.
Чувствовать себя некомфортно, чтобы написать висящую функцию или метод где-то еще, когда он используется только в одном разделе кода.
Для более коротких генераторов я бы просто написал однострочное выражение генератора или понятный список, без проблем.
В качестве примера игрушки:
def gen_test():
for i in range(10):
for j in range(20):
yield i * j
def main():
return sum(gen_test())
Если main()
на самом делеметод внутри класса, извлечение gen_test()
из другой функции или метода добавляет ненужный беспорядок, поэтому меня соблазняет:
def main():
def gen_test():
for i in range(10):
for j in range(20):
yield i * j
return sum(gen_test())
Это быстрее, чем добавление в список:
def main():
vals = []
for i in range(10):
for j in range(20):
vals.append(i * j)
return sum(vals)
Кажется, что хорошо, когда есть только одна внутренняя функция, но часто я пишу несколько из этих ~ 4-6 выражений генератора строк для функции;я все еще должен написать внутреннюю функцию для каждого?