迭代器
#只要是能被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)
心里有点乱。。。先这样吧。