网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的范文:

 

标题 Python的迭代器和生成器使用实例
范文
    一、迭代器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
    --------------------
    结果:
    代码如下:
    3
    2
    1
    0
    二、生成器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)]
    --------------------
    结果:
    代码如下:
    1
    1
    2
    [3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
    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')
    例子:
    代码如下:
    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()
    --------------------
    结果:
    代码如下:
    powering 1
    adding to 1
    3
    powering 4
    adding to 4
    7
    保持代码简单,而不是数据。
    注意:宁可有大量简单的可迭代函数,也不要一个复杂的一次只计算出一个值的函数。
    例子:
    代码如下:
    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")
    --------------------
    结果:
    代码如下:
    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
随便看

 

在线学习网范文大全提供好词好句、学习总结、工作总结、演讲稿等写作素材及范文模板,是学习及工作的有利工具。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/16 5:17:44