What is a generator:
As long as there is a yield keyword inside the function, the result (the generator address) of the function name () is the generator,
Re-calling function does not execute function internal code
The generator itself has the _iter_ he _next_ function (i.e. the generator is an iterator)
Why Use Generators:
A builder is a way to customize iterators
Summarize the function of yield
1. Provide a way to customize iterators
2, yield can pause the function, return value
Yield He return
Same point: All are used within the function, can return a value, no type limit, no number limit
Difference: Return returns only one value at a time, and yield can return multiple values
1. Generator next value, for example 1:
def func (): #第一步: Defining functions
Print (' First1 ')
Print (' First2 ')
Print (' First3 ')
Yield 1 #暂停
Print (' Second1 ')
Print (' Second2 ')
Print (' Second3 ')
Yield 2 #暂停
Print (' third ')
Yield 3 #暂停
Print (' fourth ')
G=func () #调用函数,do not execute function body code(just got the generatori.e. iterators)
Print (g)
Res1=next (g) #把yieldBehind thereturn valueAssign a value tores1#取到一个值, this value is determined by the Func-yield Control, so next will print from top to bottom.
Print (' First return value: ', res1)
Print (' = ' *100)
Res2=next (g)
Print (' Second return value: ', Res2)
The output is:
<generator object Func at 0x05597bd0>
First1
First2
First3
Return value for the first time: 1
===============================================================
Second1
Second2
Second3
Return value for the second time: 2
1. Generator Next value (for loop), for example 2:
For item in G: #g =iner (g) #item =next (g)
Pass #注意Next (g) Prints the result of the function body print only , and the yield pauses Pass,yield and continues the next loop.
Output Result:
First1
First2
First3
Second1
Second2
Second3
Third
Fourth
The actual yield value has been assigned to Item=next (g), item, but not printed above
For item in G:
Print (item)
First1
First2
First3
1
Second1
Second2
Second3
2
Third
3
Fourth
2. Customize the Range function model (for example: My_Range)
def my_range (start,stop,step=1):
While start < stop:
Yield start
Start+=step
Obj=my_range (1,7,2) #顾头不顾尾只能从1, value in 2,3,4,5,6
Print (Next (obj)) #1
Print (Next (obj)) #3
Print (Next (obj)) #5
Print (Next (obj)) #报错StopIteration
3. Ternary expression (return value if conditional if condition is not established when condition is established )
x=10
Y=20
res = x if x > Else y
Print (RES)
4. List generation: ( value placed on the left of the For Loop )) (for a basket of eggs)
#原始取值
L=[]
For I in Range (1,11):
L.append (i)
Print (L)
Improvements to:
L=[i for I in Range (1,11)]
Print (L) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Get a set of lists that account for large memory space
For example 1:
names=[' Alex ', ' wxx ', ' LXX ']
Names=[name+ ' SB ' for name in Names]
Print (names) #[' alexsb ', ' wxxsb ', ' LXXSB ']
5. Generator expression: (to a chicken)
# relative column generation save space, just start doing nothing,T itself is an iterator , need to take a value
t=(i-i in range (100000000))
Print (t) #<generator object <genexpr> at 0x05057bd0> get a generator that does not occupy memory space
Print (Next (t)) #0
Print (Next (t)) #1
Print (Next (t)) #2
6. Dictionary-generated: ()
keys=[' name ', ' age ', ' sex '
values=[' Egon ', ' Male ']
Res=zip (keys,values)
Print (list (res)) #[(' name ', ' Egon '), (' Age ', '), (' Sex ', ' male ')]
Way One
d={}
For k,v in Zip (keys,values):
D[k]=v
Print (d) #{' name ': ' Egon ', ' age ': +, ' sex ': ' Male '}
Way Two
D={k:v for k,v in Zip (keys,values)}
Print (d) #{' name ': ' Egon ', ' age ': +, ' sex ': ' Male '}
7.zip () Zipper function:
s= ' Hello '
l=[1,2,3,]
Res=zip (s,l)
Print (list (res)) #[(' H ', 1), (' E ', 2), (' L ', 3)]
8.max function (the longest value of the number of digits Len)
Scenario 1:
With open (' A.txt ', encoding= ' utf-8 ') as F:
Nums=[len (line) to line in F] # "" Nums the values are all stored in the list
Print (max (nums)) #返回值32
Print (max (nums)) #在任何地方取都OK #返回值32
# scenario 2:
With open (' A.txt ', encoding= ' utf-8 ') as F:
nums= (len Line) is #如果 (), Nums is an iterator object, and every time it is taken there is no
Print (max (nums)) #返回值32
Print (max (nums)) #max () arg is an empty sequence above has been the maximum value, then the hint is empty
Python builder, ternary expression, list-generated, dictionary-generated, generator-expression