迭代器,生成器and文件监听

迭代器

#只要是能被for循环的数据类型  就一定拥有__inter__方法

  print([].__iter__())

一个列表执行了__iter__()之后的返回值就是一个迭代器

# Iterable 可迭代的 -- > __iter__ #只要含有__iter__方法的都是可迭代的
# [].__iter__() 迭代器 -- > __next__ #通过next就可以从迭代器中一个一个的取值

# 只要含有__iter__方法的都是可迭代的 —— 可迭代协议

# 迭代器的概念
# 迭代器协议 —— 内部含有__next__和__iter__方法的就是迭代器

# 迭代器协议和可迭代协议
# 可以被for循环的都是可迭代的
# 可迭代的内部都有__iter__方法
# 只要是迭代器 一定可迭代
# 可迭代的.__iter__()方法就可以得到一个迭代器
# 迭代器中的__next__()方法可以一个一个的获取值

# for循环其实就是在使用迭代器
# iterator
# 可迭代对象
# 直接给你内存地址
# print([].__iter__())
# print(range(10))

#for
#只有 是可迭代对象的时候 才能用for
#当我们遇到一个新的变量,不确定能不能for循环的时候,就判断它是否可迭代

# for i in l:
# pass
#iterator = l.__iter__()
#iterator.__next__()

#迭代器的好处:
# 从容器类型中一个一个的取值,会把所有的值都取到。
# 节省内存空间
#迭代器并不会在内存中再占用一大块内存,
# 而是随着循环 每次生成一个
# 每次next每次给我一个

生成器

生成器函数--------本质上就是我们自己写得函数

 

#生成器函数
# def generator():
# print(1)
# return 'a'
#
# ret = generator()
# print(ret)

 

 

#只要含有yield关键字的函数都是生成器函数
# yield不能和return共用且需要写在函数内
# def generator():
# print(1)
# yield 'a'
# #生成器函数 : 执行之后会得到一个生成器作为返回值

 

文件监听

 1 def tail(filename):
 2 #     f = open(filename,encoding='utf-8')
 3 #     while True:
 4 #         line = f.readline()
 5 #         if line.strip():
 6 #             yield line.strip()
 7 # 
 8 # g = tail('file')
 9 # for i in g:
10 #     if 'python' in i:
11 #         print('***',i)

 

心里有点乱。。。先这样吧。

 

posted @ 2018-01-02 23:35  Carol-z  阅读(139)  评论(0编辑  收藏  举报