Внутри класса контейнера, когда я хочу перебирать его элементы (или преобразования его элементов, или подмножество его элементов), я могу либо записи генератор (как f
) или возврата генератор (например, g
):Написать генератор или вернуть генератор?
class SomeContainer:
def __init__(self):
self.data = [1, 'two', 3, 'four']
def f(self):
for e in self.data: yield e + e
def g(self):
return (e + e for e in self.data)
sc = SomeContainer()
for x in sc.f(): print(x)
for x in sc.g(): print(x)
Мне не нужно, чтобы передать информацию в генератор через send
.
Очевидно, что оба пути ведут себя одинаково (на поверхности).
Какой подход предпочтительнее и почему?
Какой подход создает меньше накладные расходы или имеет другие преимущества Я не могу определить?
На самом деле понимание генератора в этом случае медленнее. 0.634 с использованием 'f()' и 0.753 с использованием 'g()' –
'g()' эквивалентно 'def h (self): return self.f()' поэтому он не должен быть быстрее, чем просто f () '. Хотя это зависит от того, как реализованы выражения генератора. – jfs