"""
1、迭代
一个接一个读取列表中的值,这个过程叫迭代
"""# 案例
mylist1=[1,2,3]
for v in mylist1:print(v,end=" ")
print()mylist2=[x*x for x in range(5)]
for v in mylist2:print(v,end=" ")"""
2、生成器
python Generator
解决了资源消耗问题,用一个值,产生一个值,用完就扔。
"""# 创建一个生成器
data_generator=(x*x for x in range(5))#圆括号打印出来是生成器,中括号打印出来是列表
print(data_generator)#此处打印出来类型是个生成器
for v in data_generator:print(v,end="")
print()
print("第二次对生成器进行迭代")
for v in data_generator:print(v,end="")#这里就什么都没有,因为在第一次迭代的时候就用完了,之后就扔掉了"""
3、yield
他跟return很像,yied是暂时挂起,之后运行的时候直接从yield这里往下运行
"""
# 案例
# 输出不大于max的所有偶数
def generator_even(max):for i in range(0,max+1):if i % 2 ==0:yield i
'''
yield与return类似
retuen expression   直接退出函数(方法),并返回expression的值
yield也返回值,但是返回的是一个generator,generator当前的值就是yield后面跟的表达式的值
'''
print(generator_even(10))#同样这里产生一个生成器even_generator=generator_even(10)
for n in even_generator:print(n,end=' ')'''
每一个generator对象都有一个隐含的方法__next__,该方法的返回值就是yield后面表达式的值
当__next__方法调用次数超过迭代次数,会抛出StopIteration异常,所以应该使用try。。。except捕获该异常
'''
print()
even_generator=generator_even(10)
print(even_generator.__next__())#0
print(even_generator.__next__())#2
print(even_generator.__next__())#4
print(even_generator.__next__())#6
print(even_generator.__next__())#8
print(even_generator.__next__())#10
# print(even_generator.__next__())#直接抛出异常
#当调用次数比迭代次数多的时候会直接抛出异常'''
4、用普通函数模拟生成器函数的效果
'''
#将生成器变成普通的列表
def generator_even(max):event=[]for i in range(0,max+1):if i % 2 ==0:event.append(i)return event
print()
for v in generator_even(20):print(v,end="")

python生成器的实现及原理相关推荐

  1. Python生成器next方法和send方法区别详解

    yield的语法规则是: 在yield这里暂停函数执行,并返回yield后面表达式的值(默认为None),直到被next()再次调用时,从上次暂停的yield代码处继续往下执行.当没有可继续next( ...

  2. python 生成器 原理_你知道python中的函数、生成器的工作原理吗?

    1.python中函数的工作原理 python的解释器,也就是python.exe(c编写)会用PyEval_EvalFramEx(c函数)运行foo()函数 首先会创建一个栈帧(stack Fram ...

  3. python生成器yield原理_Python generator生成器和yield表达式详解

    前言 Python生成器(generator)并不是一个晦涩难懂的概念.相比于MetaClass和Closure等概念,其较为容易理解和掌握.但相对于程序结构:顺序.循环和分支而言其又不是特别的直观. ...

  4. python生成器杨辉三角_python 生成器生成杨辉三角的方法(必看)

    用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...

  5. Python 生成器 和 yield 关键字

    Python 中 yield 的作用:http://youchen.me/2017/02/10/Python-What-does-yield-do/# Python 生成器详解:http://codi ...

  6. python生成器的使用_应该如何以及为什么使用Python生成器

    python生成器的使用 by Radu Raicea 由Radu Raicea 应该如何以及为什么使用Python生成器 (How - and why - you should use Python ...

  7. Python生成器函数案例一则:理财收益计算

    问题描述:假设理财利率不变,那么需要多少年才能使得投资翻倍? 技术要点:1)生成器函数:2)内置函数enumerate(). 参考代码: ----------喜大普奔---------- 1.董付国老 ...

  8. Python生成器对象send()方法用法

    关于生成器基本用法请参考详解Python生成器函数和生成器对象的原理和用法 >>> def f():     yield from 'abcdefg'     #使用yield表达式 ...

  9. python 生成器装饰器_七.python迭代器生成器装饰器

    1.迭代器 1.1 什么是可迭代对象(Iterable)? 定义:可以直接作用于for循环的对象统称为可迭代对象,即Iterable. 可迭代对象包括: 1.集合数据类型:如list.tuple.di ...

  10. Python生成器与迭代器

    Python生成器与迭代器 前言 首先,来让我们弄清楚可迭代对象 可迭代对象 在python中,可迭代对象并不是指某种具体的数据类型,它是指存储了元素的一个容器对象 也就是说,如果容器里面没有存储数据 ...

最新文章

  1. 读书笔记之: 计算机网络(第4版)- 第6章 传输层
  2. win2003服务器的一些安全设置
  3. Py之seaborn:seaborn库的简介、安装、使用方法之详细攻略
  4. C# StopWatch的BUG????
  5. java 匿名类 实现接口_细谈 Java 匿名内部类 【分别 使用 接口 和 抽象类实现】...
  6. “流式”前端构建工具——gulp.js 简介
  7. 如何为 .NET Core CLI 启用 TAB 自动补全功能
  8. [BZOJ1726][Usaco2006 Nov]Roadblocks第二短路
  9. jvm内存模型和java内存模型_JVM运行时内存模型综述
  10. high performance web sites 阅读小记
  11. Kotlin — 在一个项目中混用 Java 与 Kotlin(混合开发)
  12. 通过cacti+nagios监控服务器的运行—nagios nrpe
  13. Fatal error: Uncaught Error: Call to undefined function gzinflate()
  14. 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
  15. 关于sematic segmentation的几篇论文(二)
  16. global在python中啥意思_Python中global用法详解
  17. 共轭相似以及共轭对角化
  18. sklearn-随机森林
  19. 计算机考研题目汇总【持续更新】
  20. 直流双闭环pwm调速系统matlab仿真,双闭环可逆直流脉宽调速系统的设计和仿真

热门文章

  1. React中函数式声明组件
  2. td中使用overflow:hidden; 无效解决方案
  3. 搭建cacti 期间问题总结
  4. 13.UNIX 环境高级编程--守护进程
  5. 50. 模型层 --- dao 层(2)
  6. 1. PHP 设计模式---工厂模式
  7. 104. 字符串函数
  8. 17.Class Preferences
  9. 3. Ubuntu LAMP 环境搭建
  10. 解放双手---jupyter快捷键