In the **php5.5.0** version, a new generator * (generators) * feature was added to simplify the complexity of implementing an Iterator interface * (Iterator) * To create a simple iterator.
With the generator, we can easily use foreach to iterate over a series of data without having to pre-build the objects in memory to be iterated, greatly reducing memory overhead.
When the generator function is called, it returns an iterative object, and when the
(g) , computes g the value of the next element until it is calculated to the last element, no more elements are thrown when the StopIteration error occurs.1g= (x forXinchRange (10))2 3 forIinchg:4 Print(i)5 6 7 The results of the operation are as follows:8 9D:\python35\python.exe D:/python Training/s14/day4/called by the generator. PYTen 0 One1 A2 -3 -4 the5 -6 -7 -8 +9 - +Process finished with exit code 05. for There are several types of data that can be directly acting on the loopA class
GeneratorIn Python, a mechanism that loops one side of the computation, called the generator: Generator.Such as:1 for Xin range2 >>> gobject0x1022ef630>Here g is a generator.IteratorsWe already know that for there are several types of data that can be directly acting on a loop:A class is a collection of data types, such as,,, list tuple , and dict set str so on;One is generator to include the generator and yield the generator function with the band.These objects, which can be directly applied t
):C=consumer ("A")C2=consumer ("B")C.__next__ ()C2.__next__ ()Print ("Lao Tzu began to prepare buns!") ")For I in range (10):Time.sleep (1)Print ("Made 1 buns, in two halves!") ")C.send (i)C2.send (i)Producer ("Alex")Operation Result:A ready to eat steamed buns!B prepare to eat steamed buns!Lao Tzu began to prepare steamed buns!Made 1 buns, in two halves!Bun [0] came and was [A] eatenBun [0] came, was [B] eatenMade 1 buns, in two halves!Bun [1] came and was [A] eatenBun [1] came, was [B] eatenFo
when it is not called.Generator (Generator)The builder is one of the most attractive features of the Python language, and the generator is a special kind of iterator, but it's more elegant. It does not need to write the __iter__ () and __next__ () methods as in the class above, only one yiled keyword is required. The generator must be an iterator (and vice versa), so any generator also generates values in a lazy-loaded pattern. Examples of Fibonacci sequences implemented with
yield and return? return can only be returned once the function is completely finished, and yield can return multiple values What does yield really do: yield the function into a generator (the generator is an iterator) The function pauses and continues the next run when the state is saved by yield The following example is the application of two generators, one for constant input URL, constant parsing, and the other is to imitate the Linux
a type of data that automatically implements the iterator protocol (other data types need to call their own built-in __iter__ method), so the generator is an iterative object.Generator classification and representation in Python: (Python provides generators in two different ways)1. Generator function: general function definition, however, returns the result using the yield statement instead of the return statement. The yield statement returns one res
in the process of the loop? This eliminates the need to createThe whole list, thus saving a lot of space. In Python, this side loop computes the mechanism, called the Generator (Generator).Python offers two ways to create generators:① Generator Function: defined as regular functions, but with yield instead of return.Yeild will return one result at a time, then hang, and continue execution the next time it is suspended, which resolves the memory limit
Linux has two special device files /dev/random and /de/urandom, which are used to generate a random number.
The random number generated by/dev/random is related to the state of the computer hardware currently in use, which improves security and is ideal for scenarios where the quality of random numbers is highly demanding. However, if the hardware status change is insufficient to provide enough information to the random number generator, the program that reads the random number generated by
state3. If the yield is followed by a data, the data will be returned,As next () function or for ... in ... Iteration of the next value4. You can wake the generator with next () to allow the generator to continue executing at the breakpointThe code is as follows:defFibo (n):"""using yield implementation generators to find Fibonacci sequences"""Count= 0#records the position of the current iteration, with an initial value of 0NUM1, num2 = 0, 1#the firs
statement appears, and the generator gives you the yield argument, and the generator does not go down. When you ask him for the next number, he will be from the last state. Start running until the yield statement appears, give you the parameters, and then stop. So repeat until you exit the function.Cases:1 def fib (max): 2 A, B = 1, 13while a Max:4 yield# Generators return an iterator that returns a stream of values. 5 A, B
Definition of an Iterative object
forThere are several types of data that can be directly acting on a loop:A class is a collection of data types, such as,,, list tuple , and dict set str so on;One is generator to include the generator and yield the generator function with the band.These objects, which can be directly applied to for the loop, are called iterative objects: Iterable .
Generator
How to create Generators
True:Try: Print(Next (Iter_dic))#"A" "E" "B" .....exceptStopiteration:#need to catch exceptions manually Break And we can iterate through the container with a powerful for loop mechanism in Python. 4,for Cycle#based on the for loop, we can completely no longer rely on the index to fetch the value.DIC = {'a': 1,'b': 2,'C': 3} forKinchDIC:Print(Dic[k])#how the For loop works#1: The dic.__iter__ () method that executes the in object, the iterator object. __iter, returns the object itself.
(Ten) if I > 5 else i] #没有四元表达式l2=[' egg%s '%i for I in range (Ten) if I l3=[' egg%s '%i for I in range (ten) Else ' haha '] #报错, no elsePrint (L)Print (L1)Print (L2) The last is the generator expression:Similar to a list explanation, but the generator expression returns an object that produces results on demand instead of building a list of results at a time, saving memory compared to the list explanationlaomuji= (' egg%s '%i for I in range) #生成器表达式Print (Laomuji)Print (laomuji.__next__ (
continually returns the next value is called an iterator: Iterator.You can use Isinstance () to determine whether an object is a iterator object:Print (Isinstance ([], Iterator)) print (Isinstance ({}, Iterator)) print (Isinstance (' abc ', Iterator)) print (Isinstance ( (X for X in range), Iterator))Output:Falsefalsefalsetrue Generators are Iterator objects, but,, list dict str Though Iterable they are, they are not Iterator .Turn list , dict and s
Recently learned Python iterators and generators, the generator is a feature, is to use the data will be used to fetch! Look at the following code and think about it, and you'll understand what lazy computing is!1 defAdd (S, x):2 returnS +x3 4 5 defGen ():6 forIinchRange (4):7 yieldI8 9 TenBase =Gen () One forNinch[1, 10]: ABase = (Add (i, N) forIinchbase) - Print(List (base))Output: [20, 21, 22, 23] very puzzled, please look downTh
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.