# Python的迭代器和生成器

+关注继续查看

Python的迭代器和生成器

1）next方法

2）__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
--------------------

3
2
1
0

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)]
--------------------

1
1
2
[3, 5, 8, 13, 21, 34, 55, 89, 144, 233]

PEP Python Enhancement Proposal Python增强建议

tokenize模块
>>> import tokenize
>>> 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')

def power(values):
for value in values:
print 'powering %s' %value
yield value
for value in values:
if value%2==0:
yield value+3
else:
yield value+2
elements = [1,4,7,9,12,19]
print res.next()
print res.next()
--------------------

powering 1
3
powering 4
7

def psychologist():
while True:
print ("Don't ask yourself too much questions")
print "A that's good, go on"
print "Don't be so negative"
free = psychologist()
print free.next()
print free.send("Why I shouldn't ?")
print free.send("ok then i should find what is good for me")
--------------------

None
Don't be so negative
None
Don't ask yourself too much questions
None
A that's good, go on
None

代码生成器对于JAVA码农来说并不陌生。在一些业务性比较强，但编码比较规范的项目中，往往会有大量的重复或者类似的代码要写。比如对表的增删改查，比如生成用于远程调用的客户端方法存根等等。面对这种情况，程序员通常的做法就是拿一个现成模块的代码copy过来再改改。
2822 0
python下yield（生成器）
python下的协程： 1 #encoding=utf-8 2 """ 3 协程----微小的进程 4 yield生成器-----生成一个可迭代对象比如list， tuple，dir 5 1、包含yield的函数，则是一个可迭代对象（list， tuple等） 6 每次运...
773 0
Charted – 自动化的可视化数据生成工具
Charted 是一个让数据自动生成可视化图表的工具。只需要提供一个数据文件的链接，它就能返回一个美丽的，可共享的图表。Charted 不会存储任何数据。它只是获取和让链接提供的数据可视化。     在线演示      插件下载 　 您可能感兴趣的相关文章 网站开发中很有用...
749 0
javascript中的迭代器
1.forEach迭代器 forEach方法接收一个函数作为参数，对数组中每个元素使用这个函数，只调用这个函数，数组本身没有任何变化 //forEach迭代器 function square(num){ document.
704 0
+关注
685

0

《SaaS模式云原生数据仓库应用场景实践》

《看见新力量：二》电子书