What Python's for x in y Loop Actually Hides from You
What `for x in y` hides from you – From Scratch Code

Building my Python interpreter in Rust, Memphis, revealed that the familiar for x in y loop isn't just iterating over a list. Instead, it strictly follows a protocol by calling iter() and next() until StopIteration is raised. This simple mechanism explains why Python handles lists, strings, ranges, and generators so uniformly, turning a magical syntax into a clear, predictable interaction between the loop and any iterable object.
"for x in y does not mean loop over y. It means ask y how to be iterated."