阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Python 迭代器与生成器

389次阅读
没有评论

共计 2120 个字符,预计需要花费 6 分钟才能阅读完成。

一、可迭代对象

1、概念

可以直接作用于 for 循环的对象统称为可迭代对象 (Iterable)

2、可以直接作用于 for 循环的数据类型

​ 1、集合数据类型 (list、tuple、dict、set、string)
​ 2、generator
​ a、生成器
​ b、带 yield 的 generator function

Iterable 表示可迭代类型

from collections import Iterable # 格式 # isinstance(obj, type):判断 obj 是否属于 type 类型 print(isinstance([], Iterable)) print(isinstance((), Iterable)) print(isinstance({}, Iterable)) print(isinstance("", Iterable)) print(isinstance(range(10), Iterable)) print(isinstance(100, Iterable))

二、迭代器

1、概念

​ 1、可以被 next() 函数调用并返回一个值的对象为迭代器对象
​ 2、迭代器不但可以用于 for,还可以用于 next()

实例:

# 转成 Iterator 对象 li = [1,2,3,4,5] g = iter(li) print(g, type(g)) print(next(g)) print(next(g))

2、为什么 list、tuple、dict、string、set 等数据类型不是 Iterator?

Iterator 对象表示的是一个流数据,Iterator 对象可以被 next() 调用并返回一个数据,直到抛出 StopIteration 异常错误则停止。可以把数据流看成一个有序的序列,但是不确定这个序列的长度,只能通过 next() 函数不断计算求值,Iterator 可以表示一个无限大的数据流,而 list 等永远不可能存储无限的数据

三、列表生成式

1、概述

​ 生成列表

2、回顾

只能生成简单的列表

print(list(range(1,11)))

3、需求

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

4、实现

  1. 循环生成列表

    li = [] for i in range(1, 11): li.append(pow(i, 2)) print(li)

    缺点:循环比较繁琐

  2. 列表生成式

    作用

    列表推导式提供了从序列创建列表的简单途径。

  • 一般形式

    li2 = [x * x for x in range(1, 11)] print(li2)
  • 添加判断

    li3 = [x * x for x in range(1, 11) if x % 2 == 0] print(li3)
  • 多层循环

    li4 = [x + y for x in "ABC" for y in "123"] print(li4)

    拆分

    for x in "ABC": for y in "123": ret = x + y

四、生成器

1、概述

推导的算法比较复杂,用给列表生成式的 for 循环无法实现的时候,可以选择使用函数得到生成器

2、注意

  1. 函数时顺序执行,遇到 return 语句后者最后一行代码就返回
  2. 如果想让一个函数变为生成器函数,只需将函数中的 return 改为 yield
  3. 执行生成器函数不会执行函数代码,得到一个生成器
  4. 在每次调用 next() 的时候,会执行生成器函数,遇到 yield 语句就返回,如果再次执行 next()

3、实现

使用函数实现

# 函数 def func1(): print("zutuanxue_com is a good man") print("zutuanxue_com is a nice man") print("zutuanxue_com is a cool man") print("zutuanxue_com is a handsome man") return 1 # 生成器函数 def func2(): print("zutuanxue_com is a good man") print("zutuanxue_com is a nice man") print("zutuanxue_com is a cool man") print("zutuanxue_com is a handsome man") yield 2 def func3(): print("zutuanxue_com is a good man") yield 1 print("zutuanxue_com is a nice man") yield 2 print("zutuanxue_com is a cool man") yield 3 print("zutuanxue_com is a handsome man") yield 4 res1 = func1() res2 = func2() res3 = func3() print(res1, type(res1)) print(res2, type(res2)) print(res3, type(res3)) print("------------------") print(next(res3)) print(next(res3)) print(next(res3)) print(next(res3)) def func4(): for i in range(1, 11): yield pow(i, 2) g2 = func4() for x in g2: print("-----------", x)

使用列表生成式实现

g1 = (x * x for x in range(1, 11))

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-05-26发表,共计2120字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7799024
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...