Steven D'Aprano <st...@pearwood.info>: > On Sat, 2 Apr 2016 07:14 am, Marko Rauhamaa wrote: >> (Somehow, the difference between iterables and iterators is analogous >> with the difference between C's arrays and pointers.) > > I don't understand this analogy. Can you explain please?
In numerous contexts, T a[N] and T *a are interchangeable. In fact, C has no rvalue notation for an array. For any other type, this works: T a, b; a = b; However, if T is an array type, the compiler complains: error: assignment to expression with array type This C innovation of blurring the lines between arrays and pointers is very different of the type system of Pascal, whose arrays behave like any other type. C could have treated arrays like other types without any loss of generality. Then you'd have to write: T a[N], *b; b = &a[0]; for: T a[N], *b; b = a; Semantically, as well, C arrays are iterables, and pointers are used to iterate over the elements of an array. Similarly, Python could have kept iterables and iterators in their separate corners by specifying: * iter(iterable) returns an iterator * iter(iterator) typically raises an Exception * the for statement requires an iterator Then, you'd have to write: for i in iter([1, 2, 3]): ... Not recommending anything one way or another. Marko -- https://mail.python.org/mailman/listinfo/python-list