Python之yield生成器

发布时间:2019-06-24 15:53:34编辑:auto阅读(1311)

    1、对比range和xrange的区别:

    >>> print range(10)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> print xrange(10)
    xrange(10)

    range()和xrange()的区别在于,range会在内存中创建所有指定的数字,而xrange不会立即创建,只有在迭代循环时,才去创建每个数组。

    这就类似于yield和return的区别



    2、yield和return的区别

    当定义一个函数时,如果函数的代码出现了return,则函数立马终止,并返回结果。就算函数下面有多个return,也只会返回第一个return值。

    示例:

    def func():
        return 1
        return 1
        return
    
    print func()
    1


    yield的原理:

    func1():
        I func1():
        I
    1
    2
    3
    
    当第一次循环是,获取值1,此时yield不会退出函数,会记住yield 1这个位置,继续执行函数,下一次就到yield2,在下一次到yield3

    return和yield的区别在于,return返回结果后会跳出函数,不再执行函授后面的代码,而yield不会跳出函数,并且会记住函数代码执行位置,下次继续执行。


    xrange()的原理:

    def mrange(arg):
        seed = 0
        while True:
            seed =seed + 1
            if seed > arg:
                return
            else:
                yield seed
    for i in mrange(10):
        print i

    每次执行一次循环,会生成一个值。知道seed>arg为止。




关键字