Code Explanation:
1. Define the Generator Function
def counter():
i = 0
while True:
i = (yield i) or i + 1
What it does:
i = 0: Initializes the counter.
while True: Infinite loop for continuous counting.
yield i: Pauses and outputs the current value of i.
i = (yield i) or i + 1: After yielding, waits for send() input.
If something is sent (e.g., send(10)), i becomes that value.
If None is sent (like when using next()), it just does i + 1.
This is a generator that can accept values using .send()!
2. Create the Generator
c = counter()
Instantiates the generator.
Important: Generator doesn't run until you call next() or send(None).
3. First next(c)
print(next(c))
What it does:
Starts the generator. Execution begins at i = 0.
Goes to yield i and yields 0.
Pauses at the yield, waiting for next input.
Output: 0
4. Send a New Value to the Generator
print(c.send(10))
What it does:
Resumes from the yield line.
send(10) assigns 10 to (yield i), so:
i = 10
Then loop continues → yield i → yields 10.
Output: 10
5. Next Increment (No send — just next())
print(next(c))
What it does:
Resumes again.
Since no value is sent, yield i receives None.
So:
i = None or i + 1
That becomes i = i + 1 = 11.
Output: 11
Final Output:
0
10
11
Download Book - 500 Days Python Coding Challenges with Explanation
.png)

0 Comments:
Post a Comment