python基础---生成器

生成器

这个老师的课
这个老师的网页

获取系列有规律但是个数不确定的数据

使用迭代器的时候可以使用一个不会产生异常的迭代器, 实际记录的是生成的数据的方式, 不是实际的数据

使用迭代器的时候这一个规则的改变不方便, 需要加一个专门的方法

还有就是如果需要大量的数据, 而实际使用的时候只用其中一部分, 会浪费大量的空间

生成器是一个记录生成数据的方式, 而不是实际的数据的方式, 实际是一个特殊的迭代器

实际定义

方法一

只需要把一个列表的生成[]改为()

nums = [x for x in range(5)]
nums2 = (x for x in range(5))

print(type(nums))
print(type(nums2))

print(nums)
print(nums2)
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
<class 'list'>
<class 'generator'>
[0, 1, 2, 3, 4]
<generator object <genexpr> at 0x000002431C7B2110>

方法二

有时候这一个推导比较复杂, 不能使用for循环实现

这时候可以使用一个函数生成一个生成器

这一个函数返回的时候使用的不是return, 而是使用yeild, 下一次调用的时候会从yeild返回的位置

def fib_generator():
    num1 = 1
    num2 = 1
    while True:
        temp_num = num1
        num1, num2 = num2, num1 + num2
        yield temp_num

这个代码块的返回值是一个生成器, 这一个生成器第一次执行会从def开始直到yield, 调用next的时候会返回yield后面的数值

fib = fib_generator()

print(fib)
print(next(fib))
print(next(fib))
print(next(fib))
print(next(fib))
print(next(fib))
<generator object fib_generator at 0x000002342F7D2110>
1
1
2
3
5

这一个迭代器执行结束的时候会产生一个异常StopIteration, 如果是使用一个return, 返回的值会成为这一个异常的参数, 可以使用try语句进行捕获

def fib_generator():
    num1 = 1
    num2 = 2

    temp_num = num1
    num1, num2 = num2, num1 + num2
    yield temp_num

    temp_num = num1
    num1, num2 = num2, num1 + num2
    yield temp_num

    temp_num = num1
    num1, num2 = num2, num1 + num2
    yield temp_num
    return "结束了!!!"

fib = fib_generator()

print(next(fib))
print(next(fib))
print(next(fib))
try:
    print(next(fib))
except StopIteration as ret:
    print(ret.value)
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
1
2
3
结束了!!!

send唤醒

除了使用next还可以使用send发送一个数据给迭代器

def fib_generator():
    num1 = 1
    num2 = 2

    temp_num = num1
    num1, num2 = num2, num1 + num2
    num = yield temp_num
    print("get ", num)

    temp_num = num1
    num1, num2 = num2, num1 + num2
    num = yield temp_num
    print("get ", num)

    temp_num = num1
    num1, num2 = num2, num1 + num2
    num = yield temp_num
    print("get ", num)
    return "结束了!!!"

fib = fib_generator()

print(fib.send(None))
print(fib.send(2))
print(fib.send(3))
try:
    print(fib.send(4))
except StopIteration as ret:
    print(ret.value)
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
1
get  2
2
get  3
3
get  4
结束了!!!
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python是一种开源的高级编程语言,拥有简单易学的语法和丰富的库,可以用来进行各种各样的任务。其中一个强大的功能就是图片生成。Python中的图片生成器可以生成各种各样的图像,例如线条图、散点图、柱状图、曲线图、饼状图等,这些图像可以用于数据可视化和图形化表达。 Python中的图片生成器有很多,值得一提的是Matplotlib和Seaborn,它们都是基于Python的数据可视化库。Matplotlib是一个用于绘图的Python工具,它提供了许多种绘图方法和绘图对象。Seaborn是一个用于统计图形绘制的库,它通过定制matplotlib库来改善其默认设置,并使得绘制美观且易于阅读的数据可视化图表变得更加简单。 使用Python图片生成器需要一些基础编程知识和图形学知识。一个简单的Python图像生成程序通常包含图像的基本参数和操作,例如画布大小、颜色、线条宽度、位置和尺寸等。对于一些高级的图形生成需要使用图形学的知识,例如弧线、三角形、立方体等。 Python图片生成器不仅可以用于科学研究和数据分析,也可以用于艺术创作和设计。例如,我们可以使用Python生成一些有趣的图像来装饰我们的博客、社交媒体、办公室等。Python图像生成器的应用场景非常广泛,只需要你的想象力。 总之,Python图片生成器提供了数百种可定制的选项,可以创建出各种精美的图形。无论是数据可视化还是艺术创作,Python都是一个强大的图像生成器。通过Python图片生成器,我们可以轻松创建出自己喜欢的图像,并将其用于各种用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值