Python基础-高级-生成器-Generator
来源:互联网 发布:beast成员关系解析知乎 编辑:程序博客网 时间:2024/05/15 01:43
生成器-Generator
可以推算的列表
如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
列表和生成器书写区别
- 列表是用[]围起来
- 生成器(Generator)使用()围起来
示例
#!/usr/bin/env python3# -*- coding: utf-8 -*-# 列表和生成器书写区别# 列表是用[]围起来mList = [x*x for x in range(10)]# 运行结果[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]print(mList)# 生成器(Generator)使用()围起来mGenerator = (x*x for x in range(10))# 运行结果<generator object <genexpr> at 0x02BE0A50>print(mGenerator)
运行结果
D:\PythonProject>python Run.py[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]<generator object <genexpr> at 0x02BE0A50>
生成器(Generator)-遍历
示例
#!/usr/bin/env python3# -*- coding: utf-8 -*-# 生成器(Generator)-遍历# 生成器(Generator)使用()围起来mGenerator = (x*x for x in range(10))# 运行结果<generator object <genexpr> at 0x02BE0A50>print(mGenerator)# 方法 1 next(生成器)print(next(mGenerator))# 方法 2for value in mGenerator: print(value)
运行结果
D:\PythonProject>python Run.py<generator object <genexpr> at 0x02320A50>0149162536496481
有推算功能的List实在是强大,所以我们要给他来点实战行的东西
yield关键字
斐波拉契数列用列表:除第一个和第二个数外,任意一个数都可由前两个数相加得到:
1, 1, 2, 3, 5, 8, 13, 21, 34, …
思路
- tuple = (index, a+index)
- a=tuple[0]
- b=t[1]
示例
#!/usr/bin/env python3# -*- coding: utf-8 -*-# 斐波拉契数列用列表:除第一个和第二个数外,任意一个数都可由前两个数相加得到:1, 1, 2, 3, 5, 8, 13, 21, 34, ...# 1, 1, 2, 3, 5, 8, 13, 21, 34def fib(max): # 同时赋予初值 n,a,index = 0,0,1 while n < max: # 有yield关键字就表示该函数是generator函数了 # 作为回报 print(b)写成 yield(b) # 遇到 yield 语句返回 yield index # tuple = (index, a+index),a=tuple[0],b=t[1] a,index = index, a+index n = n+1 # 遇到 yield 语句返回 return "随便"for n in fib(6): print(n)
运行结果
D:\PythonProject>python Run.py112358
获取生成器的返回值
因为遇到 yield 语句返回,所以这里使用try-catchde 方式来获取
示例
#!/usr/bin/env python3# -*- coding: utf-8 -*-# 斐波拉契数列用列表:除第一个和第二个数外,任意一个数都可由前两个数相加得到:1, 1, 2, 3, 5, 8, 13, 21, 34, ...# 1, 1, 2, 3, 5, 8, 13, 21, 34def fib(max): # 同时赋予初值 n,a,index = 0,0,1 while n < max: # 有yield关键字就表示该函数是generator函数了 # 作为回报 print(b)写成 yield(b) # 遇到 yield 语句返回 yield index # tuple = (index, a+index),a=tuple[0],b=t[1] a,index = index, a+index n = n+1 # 遇到 yield 语句返回 return "我是返回值"x = fib(6)# 获取返回值def test(): while True: try: # 获取 yield 返回的数据 z = next(x) print("生成器 :" + str(z)) except StopIteration as e: print(e.value) breaktest()
运行结果
D:\PythonProject>python Run.py生成器 :1生成器 :1生成器 :2生成器 :3生成器 :5生成器 :8我是返回值
阅读全文
0 0
- Python基础-高级-生成器-Generator
- python高级特性(生成器generator )
- python高级特性之生成器(generator)
- 转载:Python高级特性 生成器(generator)
- 【Python基础】生成器——generator
- Python 基础 —— 生成器 generator
- [Python]生成器(generator)
- Python 生成器 generator
- python生成器Generator
- Python-----生成器:generator
- Python 生成器 generator
- Python 生成器(generator)
- Python之生成器Generator
- python中的生成器generator
- python 生成器(generator)
- python 生成器generator
- Python 生成器详解 generator
- python 生成器 generator
- 227. Basic Calculator II
- 对互联网VC的10点看法
- tar,7z,zip之间的爱恨情仇
- 设计模式【开放封闭原则】
- java.sql.BatchUpdateException: Incorrect string value: '\xF0\x9D\x94\xB9+)...' for column 'NAME_' at
- Python基础-高级-生成器-Generator
- Java解析JSON格式数据
- DDL和DML区别
- KOL的知识变现
- TestNG API常用参数解释
- 算法思维(递归)训练:输出字符串长度为M的子序列
- oracle错误密码导致library cache lock
- Ubuntu的web服务器搭建系列之MySQL(JDK+Tomcat+MySQL+Nginx+Redis+NodeJS)
- 工作了3年的JAVA程序员应该具备什么技能