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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值