码迷,mamicode.com
首页 > 编程语言 > 详细

python3--生成器

时间:2016-12-12 07:37:05      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:tor   开始   记录   斐波那契   max   实现   使用   保存   --   

# Auther: Aaron Fan

"""
生成器:只有在调用的时候才会生成相应的数据(调用到这个数据的时候才会生成这个数据,没有调用到时就没有这个数据)
只记录数据的当前位置

生成器不能像普通的列表一样,通过下标或者切片的方式去取
生成器只能通过 循环 或者__next__()(2.x中用next())方法去取。
"""

# 创建生成器

"""
# 方法一:
generator1 = ( i*i for i in range(10) )
for i in generator1:
print(i)
"""


# 生成一个列表,保存一个计算20次的斐波那契数列:
# 斐波那契数列:除第一个和第二个数外,任意一个数都可由前两个数相加得到。

"""
# 普通的方法,用一个函数实现:
def fib(max):
n, a, b = 0, 0, 1
while n < max:
print(b)
a, b = b, a + b # 注意,赋值语句a, b = b, a + b
# 相当于:
# t = (b, a + b) #t是一个tuple(元组)
# a = t[0]
# b = t[1]
n += 1
return ‘done‘
fib(20)
"""

# 方法二:
# 使用生成器,来生成一个斐波那契数列:
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b # 注意这里的区别
a, b = b, a + b # 注意,赋值语句a, b = b, a + b
# 相当于:
# t = (b, a + b) #t是一个tuple(元组)
# a = t[0]
# b = t[1]
n += 1
# 这个函数因为使用了yield,它便不能再称之为函数,而应该称之为生成器
# 而这里的return的返回值,值返回给一个异常状态下的值
# 比如这里当所有数据都生成完成后,没有数据了,会返回这么一个异常:StopIteration: done,这个done是可以自定义的,就是通过下面的这个return
return ‘done‘
fib_generator = fib(20)
print(fib_generator)
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print(‘start fib_generator:‘)
#for i in fib_generator: # 注意:前面因为已经使用next方法,取过几个数据了,所以这里直接从最后一次取值的地方开始循环
# print(i)
while True:
try:
fib_value = fib_generator.__next__()
print("fib_value: %s" % fib_value)
except StopIteration as fibs:
print("Generator return value: %s " % fibs.value)
break

python3--生成器

标签:tor   开始   记录   斐波那契   max   实现   使用   保存   --   

原文地址:http://www.cnblogs.com/AaronFan/p/6161157.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!