Sirius' blog Sirius' blog
首页
  • 学习笔记

    • 《C++》
    • 《MATLAB》
    • 《Python》
  • 学习笔记

    • 《Git》
    • 《CMake》
  • 技术文档
  • 博客搭建
  • 学习
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Sirius0v0

怕什么真理无穷,进一寸有一寸的欢喜
首页
  • 学习笔记

    • 《C++》
    • 《MATLAB》
    • 《Python》
  • 学习笔记

    • 《Git》
    • 《CMake》
  • 技术文档
  • 博客搭建
  • 学习
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Python学习_基础语法(一)
  • Python学习_运算符
  • Python学习_函数
  • Python学习_异常
  • Python学习_文件
  • Python学习_全局变量与局部变量
  • Python学习_推导式
  • Python_生成器和迭代器
    • 得到生成器的方式
      • 通过列表推导式得到
      • 借助函数得到
    • 得到元素的方法
      • .__next__()
      • next(generator)函数
      • .send(value)
    • 应用
  • Python学习_面向对象
  • Python学习_OS模块
  • 《Python》学习笔记
Sirius0v0
2020-10-21
目录

Python_生成器和迭代器

# 生成器

生成器可以节省内存!

# 得到生成器的方式

# 通过列表推导式得到

用小括号括起来得到生成器

g = (x*3 for x in range(100))
print(type(g))

>> <class 'generator'>

# 借助函数得到

  • 函数中使用yield关键字得到生成器,通过return返回报错内容

举例生成斐波那契数列并演示报错提示

def fib(length):
    a, b = 0, 1
    n = 0
    
    while n < length:
        yield a
        a, b = b, a+b
        n += 1
    return "没有更多的元素!"


g = fib(10)
for i in range(11):
    print(g.__next__())
    
    
>> 0
1
1
2
3
5
8
13
21
34
Traceback (most recent call last):
  File "E:/Desktop/python/pythonpractice/Generator.py", line 14, in <module>
    print(g.__next__())
StopIteration: 没有更多的元素!

# 得到元素的方法

# .__next__()

g = (x*3 for x in range(100))
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())

>> 0
3
6
9

# next(generator)函数

g = (x*3 for x in range(100))
print(g.__next__())
print(next(g))

>> 0
3

# .send(value)

  • 第一次必须发送None
  • .send(value)向每次生成器调用中传值
def gen():
    i = 0
    while i < 5:
        temp = yield i
        print('temp:',temp)
        i += 1
    return "没有更多的数据"

g = gen()
print(g.send(None))
print(g.send('嘻嘻'))
print(g.send('哈哈'))

>> 0
temp: 嘻嘻
1
temp: 哈哈
2

# 应用

携程

# 迭代器

  • 可以被next()函数调用并不断返回下一个值的对象成为迭代器:Iterator
  • 可迭代的 不一定 就是迭代器(e.g. list是可迭代,但不是迭代器)
  • 可以使用iter()将可迭代类型转换为迭代器
  • 生成器属于迭代器的一种
编辑 (opens new window)
#Python
上次更新: 2023/08/09, 13:21:24
Python学习_推导式
Python学习_面向对象

← Python学习_推导式 Python学习_面向对象→

最近更新
01
ipopt优化库配置及使用
07-21
02
ubuntu离线安装包的方法
07-21
03
其它控件的使用
03-05
更多文章>
Theme by Vdoing | Copyright © 2020-2024 Sirius0v0 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式