当前位置: 首页 > news >正文

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文件读取)


文章目录

  • python系列文章目录
  • 前言
  • 一、可迭代对象
  • 二、迭代器对象
  • 三、迭代器
  • 四、生成器
  • 总结


前言

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


一、可迭代对象

  • 例如:字符串、列表、文件
  • 实现了__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=dateself.index=len(date)#协议的声明 声明类是一个可迭代的对象def __iter__(self):return self#产生数据的def __next__(self):if self.index == 0:raise StopIterationself.index-=1return 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 1print("222")yield 2print("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 因为会接着上一个继续运行 这也是生成器的特点之一

总结

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


http://www.mrgr.cn/news/13703.html

相关文章:

  • kotlin中常用扩展函数
  • 在VB.net中,LINQ在数据统计方面的应用,举例说明
  • 数据结构与算法学习day18-层序遍历
  • Python-MNE-源定位和逆问题01:源估计(SourceEstimate)数据结构
  • Linux学习笔记4 重点!网络排障命令
  • Go 中间件学习
  • Spark MLlib 特征工程系列—特征转换VectorSizeHint
  • 扑捉一只耿鬼(HTML文件)
  • 在Ubuntu 18.04上如何从默认的APT仓库安装MongoDB
  • 【Yarn】Yarn的基本执行流程(二)AM Container的启动
  • OpenCV绘图函数(4)绘制轮廓线的函数drawContours()的使用
  • MySQL数据库MVCC机制底层原理详解
  • 软件测试 | 测试用例Ⅱ
  • idea便捷操作
  • 创建型设计模式-构建器(builder)模式-python实现
  • 【国外比较权威的免费的卫星数据网站——NASA Worldview】
  • 未来十年美业发展方向:健康与美容的结合|美业SaaS系统收银系统源码
  • 数据结构-顺序表-详解
  • [Arxiv 2024] Self-Rewarding Language Models
  • 一步步理解 Python 异步生成器(AsyncGenerator)——从入门到实践