规范化的Python编程-迭代器和生成器

来源:互联网 发布:老男孩linux运维视频 编辑:程序博客网 时间:2024/05/22 02:27

迭代器生成器规范化编程总结

import itertools#--------------列表推导式#print [y for y in range(10) if y % 2 == 0]#--------------List comprehension.每当要对序列中的内容进行循环处理时,就该尝试这个def _treatment(pos, element):return '%d: %s' %(pos, element)seq = ["one", "two", "three"]#print [_treatment(i, el) for i, el in enumerate(seq)]#--------------迭代器__metaclass__ = typeclass MyInerator():def __init__(self, step):self.step = stepdef next(self):if self.step == 0:raise StopIterationself.step -= 1return self.stepdef __iter__(self):return self#for el in MyInerator(4): print el#--------------生成器#--------------生成器推导式# (y ** 2 for y in range(10) if y % 2 == 0)#当需要一个将返回一个序列或在循环中执行的函数时def power(values):for value in values:print 'Powering: %s' %valueyield valuedef adder(values):for value in values:print 'Adding: %s' %valueif value % 2 == 0:yield value + 3else:yield value + 2#element = [1, 4, 7, 9, 12, 19]#res = adder(power(element))def psychologist():print 'Tell me about your problems'while True:answer = (yield)if answer is not None:if answer.endswith('?'):print 'Came down, relax!'elif 'good' in answer:print 'A that good, go on!'elif 'bad' in answer:print 'Don\'t be so nagetive!'else:print 'Don\'t be shy!'#free = psychologist()def my_generator():try:yield 'something'except ValueError:yield 'dealing with error'finally:print 'Ok, that over'#gen = my_generator()#itertool模块#当需要抽取位于流中特定位置的数据时,都可以使用islice.def starting_at_five():value = raw_input().strip()while value != '':for el in itertools.islice(value.split(), 4, None):yield elvalue = raw_input().strip()#iter = starting_at_five()#iter.next()


0 0