My first thought was that they were borrowing from Smalltalk
They didn't, and that's why I'm not happy with them
Iterators are implemented by changing the underlying object model slightly and adding some new built in functions and making changes to the effects of certain syntactical elements. In Smalltalk, iterators are just a natural use of the exising object model, based on the same simple and consistant approach
Python keeps changing and adding to the core language and syntax, rather then keeping a simple and consistant core and adding functionality by improving class libraries. This has been my frustration with Python, the existing classes are a good start but still need a lot of fleshing out, but all development in the last few releases have been along lines of changing the core library.
A good collection library would've made iterators easy to add without requiring syntactical changes. Good iterators would've made list comprehensions unneccessary.
Python performance, I think, may drive some of this. By making iterators (or part of the implementation) a builtin function, you can get better performance than you could if you just coded something similar in Python. I think, as a result, when a new desired feature comes along, there is a temptation to implement it as a change to the core language so it can be written in C and thus have acceptable performance, rathert than putting the effort and research into actually improving Python performance and growing the language by extending the Python-written classes
But Python totally misses the point and philosophy of Smalltalk iterators