python 学习之 生成器

生成器是特殊的迭代器

a=(i for i in range (10))
a

可以看出,我们产生了一个生成器
然后

next(a)
next(a)
next(a)

或者

for m in a:
    print(m)

因为 for 迭代 本质是 next()

函数return 后,或者函数运行到末尾,会结束,所有函数中的数据都会删除,再次调用也是重头开始
而 关键字 yield ,作用相当于 return ,返回值, 但不会使函数结束,相当于让函数暂停在那,再次调用时,会从下一行开始执行
注意 yield 和return 不要一起用

看下面代码

def test():
    n=1
    while True:
        n=yield n
        n+=1
for i in test():
    print(i)

在这里插入图片描述
可以看出第二次进入生成器中,因为上一次的赋值操作还没有进行 ,赋值符右边是next()函数 返回的 None ,所有 n 被赋给了 None的值

由此我们引入 send()函数
作用相当于 发送一个值 到yield 表达式 ,然后next()

单步调试下面代码可理解


def test():
    n=1
    while True:
        n=yield n
        n+=1
t=test()
i=next(t)
print(i)
i=t.send(5)
print(i)

参考文章
找素数
设定开始和结束位

mylist=[]
def is_primes(start):
    if start<2:
        return False
    elif start==2:
       return True
    else :
        if not start % 2==0:
            for current in range(3,start,2):
                if start%current==0:
                    return False
            else:
                return True
        
def get_primes(start,stop):
    for n in range(start,stop+1):
        if is_primes(n):
            yield n
for i in get_primes(1,100):
    mylist.append(i)
print(mylist)

文章只是 学习笔记,不是专门教程 望谅解

猜你喜欢

转载自blog.csdn.net/m0_52521883/article/details/113805320