python笔记(迭代器与生成器)

迭代器:
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()方法就能得到一个迭代器
迭代器的特点:

猜你喜欢

转载自blog.csdn.net/qq_41433183/article/details/83474753