生成器 代替迭代器 yield

本文深入探讨了Python中生成器的使用方法及其优势,并通过具体示例展示了如何利用生成器表达式和惰性求值来提高代码效率。此外,还介绍了自定义迭代器类的方法。

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

 生成器

def gen_123():
    yield 1
    yield 2
    yield 3

def x():
    print(gen_123)
    [print(i) for i in gen_123()]
    g = gen_123()
    next(g)
    next(g)
    next(g)
def gen_AB():
    print('start')
    yield 'A'
    print('continue')
    yield 'B'
    print('end')
def y():
    [print('-->', c) for c in gen_AB()]

惰性实现


RE_WORD = re.compile('\w+')
class Sentence:
    def __init__(self, text):
        self.text = text
    def __repr__(self):
        return 'Sentence(%s)' % reprlib.repr(self.text)
    def __iter__(self):
        for match in RE_WORD.finditer(self.text):
            yield match.group()

def y():
    s = Sentence('pig and dog')
    # it = iter(s)
    # print(next(it))
    # print(next(it))
    for i in s:
        print(i)
y()

生成器表达式

import re, reprlib
from collections import abc

RE_WORD = re.compile('\w+')
class Sentence:
    def __init__(self, text):
        self.text = text
    def __repr__(self):
        return 'Sentence(%s)' % reprlib.repr(self.text)
    def __iter__(self):
       return (match.group() for match in RE_WORD.finditer(self.text))

def gen_AB():
    print('start')
    yield 'A'
    print('continue')
    yield 'B'
    print('end')

def y():
    res1 = [x*3 for x in gen_AB()]
    [print('-->', i) for i in res1]
    print('----------------')
    res2 = (x*3 for x in gen_AB())  #返回的生成器并不在这使用
    [print('-->', i) for i in res2]
y()

sentence_gen3.py--->
start
continue
end
--> AAA
--> BBB
----------------
start
--> AAA
continue
--> BBB
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值