python学习day09 生成器 迭代器

#*****************列表表达式************
# l=[s**2 for s in range(1,11) if s%2 is 0]
# print(l)
# #[4, 16, 36, 64, 100]  1-10内所有偶数的平方

#*****************使用列表表达式创建generator,将 [ ]换为 ( )*********
# l=(s**2 for s in range(1,11) if s%2 is 0)
# print(l)  #<generator object <genexpr> at 0x0000015C4A3A4BA0> 表明这是一个生成器对象
# print(next(l))  #4
# print(next(l))  #16
# print(next(l))  #36
# print(next(l))  #64

#************************使用函数创建,yield***************
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'
f=fib(10)       #  规定了循环的总次数,同时fib进行了初始化,指向第0个
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
# 1
# 1
# 2
# 3
# 5
# 8


for i in fib(10):   #使用迭代代替next
    print(i)
# 1
# 1
# 2
# 3
# 5
# 8
# 13
# 21
# 34
# 55
g = fib(6)
while True:
    try:
        x = next(g)
        print('g:', x)
    except StopIteration as e:
        print('Generator return value:', e.value)
        break
# g: 1
# g: 1
# g: 2
# g: 3
# g: 5
# g: 8
#*****************杨辉三角**********************
#           1
#          / \
#         1   1
#        / \ / \
#       1   2   1
#      / \ / \ / \
#     1   3   3   1
#    / \ / \ / \ / \
#   1   4   6   4   1
#  / \ / \ / \ / \ / \
# 1   5   10  10  5   1
def YH(max):
    n ,l1,count = 0 ,[1] ,0
    while n < max:
        try:
            yield l1
            l2 = []
            for i in range(0, (len(l1) - 1)):
                l2.append(l1[i] + l1[i + 1])
            l2.insert(0, 1)
            l2.append(1)
            l1 = l2
            n += 1
        except StopIteration as e:
            print('Generator return value:', e.value)
            break

Y = YH(10)
for i in Y:
    print(i)

猜你喜欢

转载自www.cnblogs.com/perfey/p/9152969.html