Python基础12-函数3(生成器)

2018-05-12  本文已影响7人  Jacob_LJ
Python基础-函数

生成器

1 概念

2 创建方式

# 列表推导式格式
# l = [i for i in range(1, 10000000) if i % 2 == 0] # 会立即生成带内容列表

# 生成器 generator 推导式格式
l = (i for i in range(1, 10000000) if i % 2 == 0)

print(next(l))
print(next(l))
print(l.__next__()) # 等价与 调用 next(),同时带有状态记录

# 生成器是特殊迭代器,可以被 for in 进行迭代。
for i in l:
    print(i)
# yied, 可以去阻断当前的函数执行, 然后, 当使用next()函数, 或者, __next__(), 
# 都会让函数继续执行, 然后, 当执行到下一个 yield语句的时候, 又会被暂停
def test():
    print("xxx")
    yield 1
    print("a")

    yield 2
    print("b")

    yield 3
    print("c")

    yield 4
    print("d")

    yield 5
    print("e")

# 下面的 for 循环创建的 test 函数,等价于上面的 test 函数方式
# def test():
#     for i in range(1, 9):
#         yield i

g = test()
print(g) >>> 获取的g 就是一个生成器

print(next(g)) >>> xxx \n 1
print(next(g)) >>> a \n 2
print(next(g)) >>> b \n 3
print(next(g)) >>> c \n 4
print(next(g)) >>> error

3 产生数据方式

4 send() 方法

def test():
    print("xxx")
    res1 = yield 1 "ooo"
    print(res1)

    res2 = yield 2
    print(res2)

g = test()

print(g.__next__())
print(g.__next__())
print(g.send("ooo"))
print(g.send(None))
print(g.send(666))

5 关闭生成器

def test():
    yield 1
    print("a")

    yield 2
    print("b")

    yield 3
    print("c")

    return 10



g = test() # 创建生成器

print(g.__next__())
print(g.__next__())

g.close() # 关闭生成器

print(g.__next__())
print(g.__next__())

6 注意

上一篇 下一篇

猜你喜欢

热点阅读