python基础(12迭代器&生成器)

python系列文章目录

python基础(01变量&数据类型&运算符)
python基础(02序列共性)
python基础(03列表和元组)
python基础(04字符串&字典)
python基础(05集合set)
python基础(06控制语句)
python基础(07函数)
python基础(08类和对象)
python基础(09闭包&装饰器)
python基础(10异常处理)
python基础(11文件读取)



前言

本文主要介绍什么是可迭代对象、迭代器对象,两者之间的区别和用法,以及什么是生成器,生成器的表达式等知识点。


一、可迭代对象

  • 例如:字符串、列表、文件
  • 实现了__iter__
  • 不可迭代、不能for循环,不能被迭代

二、迭代器对象

  • 实现了__iter__
  • 实现了__next__

三、迭代器

1.特点

  • 可以迭代的,并且从第一个位置开始,直到所有原始被访问结束,只能前进不能后退

2.说明

  • iter表示这个是可迭代的对象
  • next表示迭代的规则,真正的运用起来

3.判断是否可迭代

print(isinstance(animal,Iterable))  #是否是可迭代对象
rint(isinstance(animal,Iterator))  #是否是迭代器对象

4.例子

class Iter_demo:
    def __init__(self,date):
        self.date=date
        self.index=len(date)
    #协议的声明 声明类是一个可迭代的对象
    def __iter__(self):
        return self
    #产生数据的
    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index-=1
        return self.date[self.index]
a=Iter_demo("abc")
for s in a:   #next() 调用 __next__()来产生数据
    print(s)  #cba  倒叙  

四、生成器

1.介绍

  • yield 返回一个值后 还能从退出的地方继续运行
  • 生成器函数:返回一个自动实现了迭代协议对象

2.例子

第一种方式

def gen_demo():
    print("111")
    yield 1
    print("222")
    yield 2
    print("333")
    yield 3
g=gen_demo()  #返回的是一个生成器的函数 对这个函数进行调用

单个调用

next(g)  #111
next(g)  #222
b=next(g)  #333
print(b)  # 返回值是3

循环调用

for i in g:
    print(i)   #111  1  222  2  333  3

第二种方式

def gen_demo1(num):
    for i in range(num):
        print(f"yield{i+1},,")
        yield i+1
g1=gen_demo1(3)

单个调用

 print(next(g1))   #用next进行调用  运行一次next(g1) 并且打印返回值  所以打印 yield1,, 1

循环调用

  for i in g1:
     print(i)    #yield1,, 1  yield2,, 2  yield3,, 3

生成器表达式

 l=(x*10+1 for x in range(10))
print(l)  #l是一个生成器对象  直接打印 打印是这个对象的地址
b=next(l)  #把返回值给b
print(b)  #1
for i in l:   #对生成器函数进行遍历打印
    print(i)  #1,11,21,31,41,51,,,

--------------------------------------------------------
整体运行结果是 11121 ,, 不会打印两个1 因为会接着上一个继续运行 这也是生成器的特点之一

总结

本文首先简单介绍了什么是可迭代对象、以及什么是迭代器对象。迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象。生成器本身也是一种迭代器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佳佳不爱上班

送你一朵小红花,生活不必太焦虑

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值