Должен ли я написать внутреннюю функцию для выражения генератора? - PullRequest
0 голосов
/ 20 февраля 2019

Я часто нахожу, что предпочел бы написать выражение генератора (например, вместо создания пустого списка и добавления к нему).Тем не менее, это означает, что мне нужно поместить выражение в функцию, чтобы вызвать его.

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

Для более коротких генераторов я бы просто написал однострочное выражение генератора или понятный список, без проблем.

В качестве примера игрушки:

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 выражений генератора строк для функции;я все еще должен написать внутреннюю функцию для каждого?

...