Python 生成器

1 生成器

1.1 生成器定义

生成器就是一个函数,有yield关键字,主要是针对函数的

from collections import Iterable,Iterator
def test():
    print("test")
    yield 1
    yield 2

g = test()
print(g)
print(isinstance(g,Iterator))   # 判断是否是迭代器对象

结果:
generator object test at 0x00000000027FC780
True

返回结果是证明生成器就是迭代器

证明了是迭代器,迭代器可以用next()执行,这里就是next(g)

print(next(g))

结果是:
test
1

结果是执行了一个test,并返回了一个1

再写一条print(next(g)),

结果是:
test
1
2

小结:

生成器是一个有yield 的函数,想要使用就要用next()f方法,运行一次next后会程序会停在yield,再次执行的时,会从yield这个位置继续向下执行。

1.2 生成器中的yield和函数return的区别

函数的返回值return的区别
return只能执行一次,函数就彻底结束
yield可以返回多次值

1.3 生成器--->迭代器 for循环

from collections import Iterable,Iterator
def test():
    print("test")
    yield 1,2,3
    yield 2

g = test()

for i in g:    # g是迭代器
    print(i)

结果:
test
(1, 2, 3)
2

yield 返回值是多个的时候,返回的是元组

牛逼之处:

自己能够定义一个函数,然后控制函数的返回值,把函数构造成一个序列类型,能够被for遍历

遇到迭代器,就用next()

1.4 迭代器计数

def countdown(n):
    print("start")
    while n > 0:
        yield n
        n -=1
    print('done')

g = countdown(5)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))

这种情况下,但n=0的时候,有next就会找yield,但是最后不能进入while循环了,所以会报错

for循环的形式:

def countdown(n):
    print("start")
    while n > 0:
        yield n
        n -=1
    print('done')

g = countdown(5)
for i in g:
	print(i)

2 Python制作动态查看文件的内容---tail工具

tail -f 查看文件的时候,是一直在等待,直到有内容增加进来

posted @ 2017-04-11 20:32  hzxPeter  阅读(172)  评论(0编辑  收藏  举报