What does the "yield" keyword do?
In Python, the yield keyword is used in the body of a function like a return statement, but instead of returning a value and terminating the function, it yields a value and suspends the function's execution. The function can then be resumed later on from where it left off, allowing it to produce a series of values over time rather than computing them all at once and returning them to a list. This is known as the generator function.
Here's an example of a generator function that yields the squares of the numbers from 1 to 10:
def squares(): for i in range(1, 11): yield i ** 2 for square in squares(): print(square) # Output: # 1 # 4 # 9 # 16 # 25 # 36 # 49 # 64 # 81 # 100
Generator functions can be useful when you want to iterate over a large sequence of values, but you don't want to store all of them in memory at the same time. Instead, the generator function produces the values one at a time as they are needed, which can save memory and improve performance.
You can also use the yield from syntax to delegate to another generator function or iterable from within a generator function. This allows you to write more concise and modular generator functions.
def squares(n): for i in range(1, n + 1): yield i ** 2 def nested_squares(n): yield from squares(n) for square in nested_squares(10): print(square) # Output: # 1 # 4 # 9 # 16 # 25 # 36 # 49 # 64 # 81 # 100