67543 发表于 2016-7-18 10:31:38

Python之yield生成器

1、对比range和xrange的区别:

1
2
3
4
>>> print range(10)

>>> print xrange(10)
xrange(10)




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


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

1
2
3
4
5
6
7
def func():
    return 1
    return 1
    return

print func()
1





yield的原理:

1
2
3
func1():
    I func1():
    I





1
2
3
4
5
1
2
3

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




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

xrange()的原理:

1
2
3
4
5
6
7
8
9
10
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为止。




页: [1]
查看完整版本: Python之yield生成器