生成器(Generator)有关

本文探讨了Python中生成器(generator)的概念及其与迭代器(iterator)的关系,展示了如何使用生成器表达式创建序列,并通过实例说明了生成器在逆序字符串及生成素数中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读书笔记:
生成器generator是特殊类型的迭代器iterator。可以通过next()方法来获取下一个值;也可以通过for循环来遍历,注意无限序列时设置条件。

列表推导式:

>>> seq = [x for x in range(20) if x%2]
>>> seq
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

生成器表达式:

>>> g = (x for x in range(20) if x%2)
>>> next(g)
1
>>> next(g)
3
>>> for i in g:
    if i%3:
        print(i,end = " ")

5 7 11 13 17 19 

这里写图片描述

这里写图片描述

这里写图片描述

改写代码:

>>> def myRev(string):
    i = len(string)-1
    while i>=0 :
        yield string[i]
        i -= 1

>>> g = myRev("HandsomeTree")
>>> for c in g:
    print(c)

e
e
r
T
e
m
o
s
d
n
a
H
>>> lst = [1,2,3,4,5]
>>> g = myRev(lst)
>>> for i in g:
    print(i,end = "  ")

5  4  3  2  1  
>>> lst.reverse()
>>> lst
[5, 4, 3, 2, 1]

这里写图片描述
这里写图片描述

改写代码:

from math import sqrt
def isPrime(num):
        #判断是否素数
    res = False       
    if num == 2:
            res = True
    elif num > 2 :      
        temp = int(sqrt(num)) + 1
        for i in range(2,temp):
                if not num%i:
                        break
        else:
            res = True                       
    return res


def getPrimes(num):
        #获取素数的生成器
    while True:
        if isPrime(num):
              yield num
        num += 1

#print(next(getPrimes(1)))       

n = 2000000
total = 0

for t in getPrimes(1):
    #print(t)
    if t > n:
        break
    else:
        total += t

print(total)

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值