• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python的迭代器和生成器使用实例

Python的迭代器和生成器使用实例

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了python迭代器和生成器,python 迭代器,python 可迭代对象,python 字典迭代,python 迭代等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一、迭代器Iterators

迭代器仅是一容器对象,它实现了迭代器协议。它有两个基本方法:

1)next方法
返回容器的下一个元素

2)__iter__方法
返回迭代器自身

迭代器可使用内建的iter方法创建,见例子:
>>> i = iter('abc')
>>> i.next()
'a'
>>> i.next()
'b'
>>> i.next()
'c'
>>> i.next()
Traceback (most recent call last):
  File "<string>", line 1, in <string>
StopIteration:

class MyIterator(object):
  def __init__(self, step):
  self.step = step
  def next(self):
  """Returns the next element."""
  if self.step==0:
  raise StopIteration
  self.step-=1
  return self.step
  def __iter__(self):
  """Returns the iterator itself."""
  return self
for el in MyIterator(4):
  print el
--------------------
</div>
结果:
3
2
1
0
</div>

二、生成器Generators

从Python2.2起,生成器提供了一种简洁的方式帮助返回列表元素的函数来完成简单和有效的代码。
它基于yield指令,允许停止函数并立即返回结果。

此函数保存其执行上下文,如果需要,可立即继续执行。

例如Fibonacci函数:
def fibonacci():
  a,b=0,1
  while True:
  yield b
  a,b = b, a+b
fib=fibonacci()
print fib.next()
print fib.next()
print fib.next()
print [fib.next() for i in range(10)]
--------------------
</div>
结果:
1
1
2
[3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
</div>

PEP Python Enhancement Proposal Python增强建议

tokenize模块
>>> import tokenize
>>> reader = open('c:/temp/py1.py').next
>>> tokens=tokenize.generate_tokens(reader)
>>> tokens.next()
(1, 'class', (1, 0), (1, 5), 'class MyIterator(object):/n')
>>> tokens.next()
(1, 'MyIterator', (1, 6), (1, 16), 'class MyIterator(object):/n')
>>> tokens.next()
(51, '(', (1, 16), (1, 17), 'class MyIterator(object):/n')
</div>
例子:
def power(values):
  for value in values:
  print 'powering %s' %value
  yield value
def adder(values):
  for value in values:
  print 'adding to %s' %value
  if value%2==0:
  yield value+3
  else:
  yield value+2
elements = [1,4,7,9,12,19]
res = adder(power(elements))
print res.next()
print res.next()
--------------------
</div>
结果:
powering 1
adding to 1
3
powering 4
adding to 4
7
</div>
保持代码简单,而不是数据。
注意:宁可有大量简单的可迭代函数,也不要一个复杂的一次只计算出一个值的函数。

例子:
def psychologist():
  print 'Please tell me your problems'
  while True:
  answer = (yield)
  if answer is not None:
  if answer.endswith('?'):
  print ("Don't ask yourself too much questions")
  elif 'good' in answer:
  print "A that's good, go on"
  elif 'bad' in answer:
  print "Don't be so negative"
free = psychologist()
print free.next()
print free.send('I feel bad')
print free.send("Why I shouldn't ?")
print free.send("ok then i should find what is good for me")
--------------------
</div>
结果:
Please tell me your problems
None
Don't be so negative
None
Don't ask yourself too much questions
None
A that's good, go on
None
</div>

</div>

您可能想查找下面的文章:

  • Python 中迭代器与生成器实例详解
  • Python使用迭代器打印螺旋矩阵的思路及代码示例
  • Python中的迭代器与生成器高级用法解析
  • 举例讲解Python中的迭代器、生成器与列表解析用法
  • python迭代器与生成器详解
  • python迭代器与生成器详解
  • 深入讲解Python中的迭代器和生成器
  • 深入讲解Python中的迭代器和生成器
  • Python迭代器和生成器介绍
  • Python的迭代器和生成器使用实例

相关文章

  • Python实现二叉搜索树
  • python getopt 参数处理小示例
  • Python 元类使用说明
  • Python列表生成器的循环技巧分享
  • Python的Tornado框架异步编程入门实例
  • 深入理解Python中字典的键的使用
  • Python实现FLV视频拼接功能
  • python 简易计算器程序,代码就几行
  • python批量下载图片的三种方法
  • Python中文分词实现方法(安装pymmseg)

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 利用Python开发实现简单的记事本
    • Python中的并发编程实例
    • 请不要重复犯我在学习Python和Linux系统上的错误
    • Python导入oracle数据的方法
    • Python中return语句用法实例分析
    • python类继承用法实例分析
    • Python 列表(List)操作方法详解
    • python协程用法实例分析
    • Python 类的继承实例详解
    • 利用Python命令行传递实例化对象的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有