迭代器:
1.dir()的用法
print(dir([])) #告诉我们列表拥有的所有方法
2.双下方法
print([1].add([2]))
print([1]+[2]) #1+2–>add–>3
@数据类型:str,set,dict,list,f=open(),range(),enumerate([])(枚举),tuple,bool
3.iter__用法
(1)只要是能被for循环的数据类型,就一定拥有__iter__方法
print([].iter())
(2)一个列表执行了__iter()之后的返回值就是一个迭代器
(3)[].iter().__length_hint :元素个数
(4)只要含有__iter__方法的都是可迭代的:可迭代协议
(5)迭代器协议:内部含有__next__和__iter__方法就是迭代器
(6)只有可迭代对象才能用for
(7)当我们遇到新的变量不确定能不能for循环时,判断它是不是迭代器4.
4.迭代器的好处:
(1)从容器类型中一个一个取值,会把所有的值都取到
(2)可以节省内存空间,迭代器并不会在内存中再占用一大块内存,而是随着循环每次生成一个,每次next每次给我一个
生成器
一. 生成器函数–本质就是我们自己写的函数
二. 生成器表达式
1.生成器函数
(1) 只要含有yield关键字的生成器都是生成器函数
(2) yield不能和return共用,且要写在函数内部
def generator():
print(1)
yield 'a'
(3) 生成器函数:执行之后会得到一个生成器作为返回值
ret = generator()
print(ret)
print(ret.__next__())
娃哈哈%i(i = 2000)
def wahaha():
for i in range(200):
yield '哇哈哈%s'%i
g = wahaha()
count = 0
for i in g:
count += 1
if count > 10:
break
print(i)
示例:监听文件输入的例子
def tail(filename):
f = open(filename,encoding='utf-8')
while True:
line = f.readline()
if line.strip(): #如果去掉回车也不为空的话就打印
yield line.strip()
g = tail('first.txt')
#如果有python关键字,就打印
for i in g:
if 'python' in g:
print('*',i)
复习
1.迭代器定义:迭代器一定可迭代,可迭代的通过iter()方法就能得到一个迭代器
2.迭代器的特点:
(1)很方便使用 ,且只能取所有的数据取一次
(2)节省内存空间
3.生成器
(1)生成器的本质就是迭代器
(2)生成器的表现形式
<1>生成器函数
<2>生成器表达式
4.生成器函数:含有yield关键字的函数就是生成器
特点:
(1) 调用函数的之后函数不执行,返回一个生成器
(2)每次调用next方法的时候会取到一个值,直到取完最后一个再执行next会报错5
5.从生成器中取值的几个方法:
(1) g.next()
(2) for循环
(3) 数据类型强制转换;(不够好,占内存)
复习题
1.处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕
def check_file(filename,check_content):
with open(filename,encoding='utf-8') as f:
for i in f:
if check_content in i:
yield i
g = check_file('file','迭代器')
for i in g:
print(i.strip())
输出结果:
#迭代器一定可迭代,可迭代的通过iter()方法就能得到一个迭代器
迭代器的特点: