Normally function returns something like lets say a list that returns that list in one go.
But yield returns 1 value each time the function is called so it can be used for generator purposes.
def getAllPalindromes():
palindromes = []
# Generate millions of palindromes
for i in range(1, 10):
palindromes.append(i)
# ... generate more ...
return palindromes # Memory explosion! 💥
all_palindromes = getAllPalindromes() # Might use gigabytes of RAM
def generatePalindromes():
for i in range(1, 10):
yield i # Only one number in memory at a time
for palindrome in generatePalindromes(): # Uses almost no extra memory
# Process one palindrome at a time
if found_enough:
break # Stop generating more