1. Iterator
Iterator Is a way to access collection elements. The iterator object starts accessing from the first element of the collection until all elements have been accessed. Iterators can only go forward, not backward, but that's okay because people rarely go backward during iteration. In addition, one of the great advantages of iterators is that they do not require all elements to be prepared in advance for the entire iteration process. The iterator only calculates an element when it iterates to it, and before or after that, the element may not exist or be destroyed. This feature makes it particularly suitable for traversing some huge or infinite collections, such as several G files
Features:
Visitors do not need to care about the internal structure of the iterator, they only need to continue to get the next content through the next() method
cannot be random To access a value in the collection, you can only access it sequentially from beginning to end
You cannot go back when you are halfway through the access
Easy to loop through relatively large data sets and save memory
>>> a = iter([1,2,3,4,5]) >>> a <list_iterator object at 0x101402630> >>> a.__next__() 1 >>> a.__next__() 2 >>> a.__next__() 3 >>> a.__next__() 4 >>> a.__next__() 5 >>> a.__next__() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
2. Generator
#When a function is called, it returns an iterator, then this function is called a generator; if the function contains yield syntax, then this function will become a generator;
def func(): yield 1 yield 2 yield 3 yield 4
In the above code: func is a function called a generator. When this function func() is executed, you will get an iterator.
>>> temp = func() >>> temp.__next__() 1 >>> temp.__next__() 2 >>> temp.__next__() 3 >>> temp.__next__() 4 >>> temp.__next__() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
3. Example
a.Use generator customization range
def xrange(n): start = 0 print(start) while True: if start > n : return yield start start += 1 obj = xrange(4) n1 = obj.__next__() n2 = obj.__next__() n3 = obj.__next__() n4 = obj.__next__() n5 = obj.__next__() n6 = obj.__next__() print(n1,n2,n3,n4,n5,n6)
b. Use an iterator to access range
The above is the detailed content of Python basics iterators and generators. For more information, please follow other related articles on the PHP Chinese website!