Primally u must decide, if u need generator, this also got improved method. Like list generator "[elem for elem in somethink]". And generators be recommended if u just use value in list for some operations. But if u need list for many changes, and work with many elements at the same time, this must be list.
(Like 70% times if standard programmer use list, better will be generator. use less memory, just many people just doesn't see other way of list. Unfortunately at our epoch, many people pee at good optymalization, and do just to work.)
If u use generator for list to improve return, let's do that same with yield guys. Anyway, we got multiple more optimized methods for all actions in Python programming language.
Yield is faster then return, and I'll prove this.
Just check this guys:
data = range(1000)
def yielder():
yield from data
def appending():
L = []
app = list.append
for i in data:
app(L, i)
return L
def list_gen():
return [i for i in data]
Of course appending will be slower then other ideas, becouse we create and extend list any loop time. Just loop "for" is very unoptymalized, if u can avoid this, do that. Becouse at any step this function load next element and write our variable, to got this object value in memory. So we jump at any element, create reference, extend list in loop (declared method is huge speed optymalizer), when we generate just return, summary got 2000 elements at two lists.
list_gen is less memorywise, we just return elements, but like up, we generate secound list. Now we got two lists, orginal data, and her copy. Summary 2000 elements. There just we avoid step with create reference to variable. Becouse our gen in lists avoid this step. Just write elements.
yielder use least of all memory, becouse we got just yielded value from data. We avoid one reference. For example:
data = range(1000)
def yielder():
yield from data
def list_gen():
return [i for i in data]
#Now we generate next reference after line [i for i in data]
for i in list_gen():
#some instruction
#This is our first reference, becouse was yield from data.
for i in yielder():
#some instruction
Use only one element to some instruction, not all from list, next one value yielder will return at next loop, not magazine all 1000 elements to write in reference.
Srry for little dig out topic, just when i accidentally came a cross from google search, other beginner python programmers can see this nonsense.