青岛做网站好的公司/网络营销最主要的工具是
概述
在上一节,我们介绍了Python的模块和包,包括:什么是模块、导入模块、自定义模块、__name__、什么是包、创建包、导入包等内容。在这一节中,我们将介绍Python的迭代器和生成器。在Python中,迭代器是一个非常重要的概念,它使得我们能够遍历一个序列而无需使用索引。迭代器不仅限于列表、元组、字符串等,我们也可以创建自定义的迭代器对象。生成器是一种特殊的迭代器,能够根据需要生成数据。与传统的列表、元组等不同,生成器可以在需要时才生成数据,从而有效节省内存空间。
使用迭代器
迭代器是Python中一个重要的设计模式。迭代器是一个能够记住遍历的位置的对象,可以让我们遍历一个容器,比如:列表、元组、字典等。Python的许多内置数据类型,比如:列表、元组、字典、集合和字符串,都实现了迭代器接口。可以使用iter()函数获取这些对象的迭代器,然后使用next()函数逐个获取元素。
info = ['hello', 'CSDN', 'python']
# 获取迭代器
it = iter(info)
# 遍历下一个元素,输出:hello
print(next(it))
# 遍历下一个元素,输出:CSDN
print(next(it))
# 遍历下一个元素,输出:python
print(next(it))
除了使用next()函数遍历元素外,也可以使用for语句进行遍历。
info = ['hello', 'CSDN', 'python']
# 获取迭代器
it = iter(info)
# 使用for遍历,依次输出:hello CSDN python
for item in it:print(item)
当然,也可以使用while语句结合next()函数遍历所有元素。此时,需要额外处理StopIteration异常。这是因为,当next()函数遍历完序列中的所有元素后,会抛出StopIteration异常。
info = ['hello', 'CSDN', 'python']
# 获取迭代器
it = iter(info)
# 使用while和next函数遍历,依次输出:hello CSDN python
while True:try:print(next(it))except StopIteration:break
创建迭代器
在Python中,可以通过定义一个包含__iter__()和__next__()函数的类来创建自定义的迭代器。其中,__iter__()函数返回一个特殊的迭代器对象,一般为迭代器对象本身;__next__()函数会返回序列中的下一个元素,并通过抛出StopIteration异常标识整个迭代过程的完成。
# 自定义迭代器类
class CustomIterator:def __init__(self):self.value = 1def __iter__(self):return selfdef __next__(self):if self.value <= 6:result = self.valueself.value += 1return resultelse:# 遍历结束时,需要抛出StopIteration异常raise StopIteration# 创建自定义迭代器对象
cus_iter = CustomIterator()# 遍历自定义迭代器,依次输出:1 2 3 4 5 6
for item in cus_iter:print(item)
在上面的示例代码中,首先定义了一个名为CustomIterator的类。这个类包含__iter__()和__next__()函数。__iter__()函数返回迭代器对象本身,而__next__()函数返回序列中的下一个元素。在__next__()函数中,检查当前值是否小于等于6,如果是,则返回当前值并将值加1,否则,抛出StopIteration异常,结束遍历。最后,我们创建了一个CustomIterator的实例,并使用for循环遍历它。
创建生成器
生成器实际上是一种特殊的迭代器,通过定义一个包含yield关键字的函数即可创建生成器。yield关键字用于在函数执行过程中返回一个值,并将控制权交回给调用者。当再次调用生成器时,它会从上次返回的位置继续执行,直到再次遇到yield。通过yield,生成器函数可以逐步产生值,而不需要一次性计算并返回所有值,节省了内存空间。与普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作。调用一个生成器函数,返回的是一个迭代器对象。在下面的示例代码中,我们定义了get_odd生成器,用于生成小于num的奇数的迭代器。
def get_odd(num):ori = 1while ori < num:yield oriori += 2
生成器在处理大量数据或需要按需生成数据的场景中,是非常有用的。比如:在处理文本文件时,我们可能不需要将整个文件一次性加载到内存中,而是可以使用生成器逐行读取文件。另外,在机器学习、大数据处理等领域,生成器也能够发挥重要作用。
Python中的生成器具有以下几个优点:
1、按需生成数据,有效节省内存空间。
2、能够处理大量数据,而不会导致内存溢出。
3、可以使用简单的代码实现复杂的迭代逻辑。
使用生成器
创建好生成器之后,我们就可以像使用迭代器一样使用生成器了。以上面的get_odd生成器为例,如果我们需要输出10以下的奇数,既可以使用next()函数,也可以使用for语句,示例代码如下。
def get_odd(num):ori = 1while ori < num:yield oriori += 2odd_generator = get_odd(10)
# 输出:1
print(next(odd_generator))
# 输出:3
print(next(odd_generator))
# 依次输出:5 7 9
for item in odd_generator:print(item)
考虑下面的应用场景:我们需要从文件中读取大量数据,并进行相应的处理。如果使用传统的列表或元组,可能会占用大量内存。此时,可以使用生成器逐行读取文件,从而有效节省内存。具体如何使用,可参考下面的示例代码。
def read_file(file_path):with open(file_path, 'r', encoding='utf-8', errors='ignore') as file:while line := file.readline():yield line.strip()generator = read_file('./test.py')
# 使用生成器读取文件,并按行输出文件内容
for line in generator:print(line)
相关文章:

8 python的迭代器和生成器
概述 在上一节,我们介绍了Python的模块和包,包括:什么是模块、导入模块、自定义模块、__name__、什么是包、创建包、导入包等内容。在这一节中,我们将介绍Python的迭代器和生成器。在Python中,迭代器是一个非常重要的概…...

Git的基本使用笔记——狂神说
版本控制 版本迭代, 版本控制( Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。 实现跨区域多人协同开发 追踪和记载一个或者多个文件的…...

【小程序】外部二维码扫码打开微信小程序并跳转到指定页面
外部二维码扫码打开微信小程序并跳转到指定页面 您需要使用微信提供的跳转链接和相关参数。以下是实现的步骤: 生成跳转链接:使用以下链接格式生成跳转链接,其中APPID是您的小程序的 AppID,PATH是您要跳转的页面路径,…...

bazel安装
安装 首先安装一下 Bazel 环境。参考 https://bazel.build/install。我是在 Ubuntu 上实验的,所以安装过程参考的是:https://bazel.build/install/ubuntu,有很多种安装方法,我选择的是使用二进制安装程序。这个具体参考的又是 ht…...

Typescript的class语法[类]的操作和应用
TypeScript 是一种面向对象的编程语言,它扩展了 JavaScript,为其添加了类型系统和其他一些特性。TypeScript 的 class 语法可以让开发者更加方便地使用面向对象的编程方式。本文将详细介绍 TypeScript 的 class 语法的操作和应用,并提供代码案…...

OPENCV实现暴力特征匹配
# -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/9/1 """ import cv2 import numpy as np# 读...

揭秘亚马逊Amazon测评,掌握细节和技巧,提升产品销量和评论数量
亚马逊是全球最大的跨境电商平台,拥有全球65个国家的几十个网站。对于跨境卖家来说,亚马逊是最值得选择的平台之一。 亚马逊的八大站点分别是美国、加拿大、墨西哥、欧洲、澳大利亚、日本、中东和巴西。 美国站点是全球最大的零售市场,拥有…...

Linux线程互斥
目录 一、线程不安全 1.线程不安全现象 2.线程不安全程序的特质 3.线程不安全程序的原因 二、线程互斥 1.基本概念 2.锁 (1)认识锁 (2)互斥锁的使用 (3)代码的改造 3.锁的本质 (1&a…...

【仿写spring之ioc篇】三、检查是否实现了Aware接口并且执行对应的方法
Aware接口 Aware接口中只是设置了对应的set方法,目前只定义了三个Aware 以BeanNameAware为例 package com.ez4sterben.spring.ioc.factory.aware;/*** bean名字清楚** author ez4sterben* date 2023/08/31*/ public interface BeanNameAware {/*** 设置beanName* …...

C++ 异常处理
C 异常(Exception)是指在程序运行时产生的特殊情况,例如,尝试除以零的操作。异常提供了一种转移程序控制权的方式,异常处理涉及到三个关键字:try、catch、throw。 throw: 当问题出现时,程序会抛出一个异常。这是通过…...

OJ练习第157题——单词拆分
单词拆分 力扣链接:139. 单词拆分 题目描述 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 …...

若依tab-content面板失效、使用load的解决方法(附详细步骤)
【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】【创作不易,点个赞就是对我最大的支持】 前言 仅作为学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦! 思路&…...

2023年03月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
第1题:拼点游戏 C和S两位同学一起玩拼点游戏。有一堆白色卡牌和一堆蓝色卡牌,每张卡牌上写了一个整数点数。C随机抽取n张白色卡牌,S随机抽取n张蓝色卡牌,他们进行n回合拼点,每次两人各出一张卡牌,点数大者获…...

Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末)
Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末🐕🐕🐕) 一.项目运行介绍 B站演示…...

Hadoop 3.2.4 集群搭建详细图文教程
目录 一、集群简介 二、Hadoop 集群部署方式 三、集群安装 3.1 集群角色规划 3.2 服务器基础环境准备 3.2.1 环境初始化 3.2.2 ssh 免密登录(在 hadoop01 上执行) 3.2.3 各个节点上安装 JDK 1.8 环境 3.3 安装 Hadoop 3.4 Hadoop 安装包目…...

STL的学习之一
1)STL扫盲 1)C标准库和标准模板库是不一样的 2)标准模板库是用泛型编程方式编写的函数或者类库; 3) SGI STL linux一般用,P.J.Plauger STL,visual2017 windows用 STL六大组件 : 容器,迭代器 STL 算法(说白了就是函数…...

如何使用Python进行数据科学实验?
使用Python进行数据科学实验通常需要以下步骤: 以上仅为使用Python进行数据科学实验的基本步骤,具体实验过程会根据具体问题和数据集的特点而有所不同。可以进一步学习和探索相关的数据科学和机器学习技术,以提高实验的效果和表现。 安装Pyt…...

华为数通方向HCIP-DataCom H12-821题库(拖拽题,知识点总结)
以下是我在现有题库中整理的需要重点关注的考点内容,如有遗漏小伙伴可以留言补充。...

第三课:C++实现PDF去水印
PDF去水印是一项非常复杂的任务,需要一定的计算机图形学知识和技术,也需要使用到一些专业的工具库。以下是一种可能的实现方法: 首先,需要将PDF文件解析成一系列图形元素,包括文字、矢量图形等。可以使用开源库Poppler或MuPDF来解析PDF文件。 接下来,需要判断PDF文件是否…...

实现Android分布式协同办公:将待办事件App与本地Web服务结合
AndServer AndServer 是 Android 平台的 Web Server 和 Web Framework,它基于编译时注解提供了类似 SpringMVC 的注解和功能。 Github :https://github.com/yanzhenjie/AndServer使用文档:https://yanzhenjie.com/AndServer/业务需求 实现待办事件APP本地启动Web服务,将本…...

VMware12.1.1安装Centos7
VMware12.1.1安装Centos7 1、下载相关软件 1.1 Centos7下载 官方下载链接: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso 1.2 VMware Workstation下载 VMware Workstation 12.1.1官方原版下载: https://dow…...

bazel构建原理
调度模型 传统构建系统有很多是基于任务的,例如 Ant,Maven,Gradle。用户可以自定义"任务"(Task),例如执行一段 shell 脚本。用户配置它们的依赖关系,构建系统则按照顺序调度。 基于 Task 的调度…...

matlab 点云的二进制形状描述子
目录 一、功能概述1、算法概述2、主要函数3、参考文献二、代码示例三、结果展示四、参数解析输入参数名称-值对应参数输出参数五、参考链接本文由CSDN点云侠原创,...

MongoDB实验——在Java应用程序中操作 MongoDB 数据
在Java应用程序中操作 MongoDB 数据 1. 启动MongoDB Shell 2. 切换到admin数据库,使用root账户 3.开启Eclipse,创建Java Project项目,命名为MongoJava File --> New --> Java Project 4.在MongoJava项目下新建包,包名为mo…...

java+springboot+mysql校园跑腿管理系统
项目介绍: 使用javaspringbootmysql开发的校园跑腿管理系统,系统包含超级管理员,系统管理员、用户角色,功能如下: 超级管理员:管理员管理;用户管理(充值);任…...

ubuntu20.04 server 安装后磁盘空间只有一半的处理
这里扩展:/dev/mapper/ubuntu–vg-ubuntu–lv rootbook:/data# df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 795M 1.2M 79…...

〔017〕Stable Diffusion 之 常用模型推荐 篇
✨ 目录 🎈 模型网站🎈 仿真系列🎈 国风系列🎈 卡通动漫系列🎈 3D系列🎈 一些好用的lora模型🎈 模型网站 由于现在大模型超级多,导致每种画风的模型太多,那么如何选择最好最适合的模型,成了很多人头疼的问题由于用的大部分都是1.5的模型,所以优先下载 safete…...

多目标应用:基于多目标人工蜂鸟算法(MOAHA)的微电网多目标优化调度MATLAB
一、微网系统运行优化模型 参考文献: [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标人工蜂鸟算法MOAHA 多目标人工蜂鸟算法(multi-objective artificial hummingbird algorithm&…...

【HTML5】HTML5 特性
HTML5 特性 1. 语义化标签 <header>:表示网页或某个区域的页眉部分,通常包含网站的标志、导航菜单等内容。<nav>:表示导航区域,用于包含网站的主要导航链接。<main>:表示网页的主要内容区域&#…...

【FreeRTOS】互斥量的使用与逐步实现
在FreeRTOS中,互斥量是一种用于保护共享资源的同步机制。它通过二进制信号量的方式,确保在任意时刻只有一个任务可以获取互斥量并访问共享资源,其他任务将被阻塞。使用互斥量的基本步骤包括创建互斥量、获取互斥量、访问共享资源和释放互斥量…...