### 生成器
l = (x for x in range(1,101,1)) #这是一个generator对象
print(next(l))
for n in l:
print(n)
def fib(max):
n,a,b = 0,0,1
while n < max:
# print(b)
yield b # 1.类似于return b,遇到yield就返回。2.下次调用generator函数时,从上次yield退出的地方继续
a,b = b,a+b
n += 1
return 'done'
def odd():
print('step1')
yield 1 #返回1的意思
print('step2')
yield(2) #返回2
print('step3')
yield(3)
g = odd() #g理解为odd函数创建的一个generator对象
next(g)
#next(g) # 只有三个yield,所以只能调用三次next,执行每次yield之前的代码 第四次调用会出错
next(odd())
next(odd()) #这种情况下,只会重复打印step1,是因为调用两次odd()函数,创建了两个generator对象
for n in fib(6): # 此时的fib函数成了generator类型函数
g = fib(6)
for n in g: # 这样就好理解了。fib()就是一个生成器函数,fib(6)是一个生成器对象,被g引用到
g= fib(6)
while True:
try:
x = next(g)
print(f'x={x}')
except StopIteration as e:
print(f'Generator return value:{e.value}')
break
###practice 生成器实现杨辉三角
def triangles(v):
n = 0
l = [1]
while n < v:
yield l
l = [1] + [l[n] + l[n+1] for n in range(len(l)-1)] + [1]
n+=1
l,n=[1],0
for i in range(1,len(l)): # 无列表生成式方式
l[i] = pre[i] + pre[i-1]
l.append(1)
pre = l[:]
l,n = [1],0
l = [sum(i) for i in zip([0]+l,l+[0])] # zip函数,将可迭代对象对应元素打包成tuple,返回tuple组成的列表
g = triangles(5)
for i in g:
print(i)
Sign in to make a reply
Promethues
### 生成器
l = (x for x in range(1,101,1)) #这是一个generator对象
print(next(l))
print(next(l))
for n in l:
print(n)
def fib(max):
n,a,b = 0,0,1
while n < max:
# print(b)
yield b # 1.类似于return b,遇到yield就返回。2.下次调用generator函数时,从上次yield退出的地方继续
a,b = b,a+b
n += 1
return 'done'
def odd():
print('step1')
yield 1 #返回1的意思
print('step2')
yield(2) #返回2
print('step3')
yield(3)
g = odd() #g理解为odd函数创建的一个generator对象
next(g)
next(g)
next(g)
#next(g) # 只有三个yield,所以只能调用三次next,执行每次yield之前的代码 第四次调用会出错
next(odd())
next(odd()) #这种情况下,只会重复打印step1,是因为调用两次odd()函数,创建了两个generator对象
for n in fib(6): # 此时的fib函数成了generator类型函数
print(n)
g = fib(6)
for n in g: # 这样就好理解了。fib()就是一个生成器函数,fib(6)是一个生成器对象,被g引用到
print(n)
g= fib(6)
while True:
try:
x = next(g)
print(f'x={x}')
except StopIteration as e:
print(f'Generator return value:{e.value}')
break
###practice 生成器实现杨辉三角
def triangles(v):
n = 0
l = [1]
while n < v:
yield l
l = [1] + [l[n] + l[n+1] for n in range(len(l)-1)] + [1]
n+=1
return 'done'
def triangles(v):
l,n=[1],0
while n < v:
yield l
for i in range(1,len(l)): # 无列表生成式方式
l[i] = pre[i] + pre[i-1]
l.append(1)
pre = l[:]
n += 1
def triangles(v):
l,n = [1],0
while n < v:
yield l
l = [sum(i) for i in zip([0]+l,l+[0])] # zip函数,将可迭代对象对应元素打包成tuple,返回tuple组成的列表
n += 1
g = triangles(5)
for i in g:
print(i)