python函数式编程——迭代器(2)

2023-10-30

文章目录


前言

python学习笔记 (仅供学习使用)


一、迭代器

迭代是访问集合元素的⼀种⽅式。迭代器是⼀个可以记住遍历的位置的对象。迭代器对象从集合的第⼀个元素开始
访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
我们已经知道,可以直接作用于 for 循环的数据类型有以下几种:
一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;
一类是 generator ,包括生成器和带 yield 的generator function。

这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。

那我们怎么判断一组数据或是一组数据对象是不是 Iterable 对象呢?
可以使⽤ isinstance() 判断⼀个对象是否是 Iterable 对象

#Iterable:可迭代对象,通过for循环遍历里面所有元素。

from collections.abc import Iterable

a = (1,)
b = [1,2]
c = {}

def test1(arg):
    if isinstance(arg,Iterable):
        print("arg is Iterable")
    else:
        print("arg is not Iterable")

#字符串,元祖,列表,字典,生成器,集合都是可迭代对象。
test1(a)
test1('')
test1(10)

run:

arg is Iterable
arg is Iterable
arg is not Iterable

⽣成器不但可以作⽤于 for 循环,还可以被 next() 函数不断调⽤并返回下⼀个值,直到最后抛出 StopIteration 错误表示⽆法继续返回下⼀个值了。
可以被next()函数调⽤并不断返回下⼀个值的对象称为迭代器:Iterator。可以使⽤ isinstance() 判断⼀个对象是否是Iterator 对象,这里就产生一个疑问了,生成器都是 Iterator 对象, list 、 dict 、 str 是不是Iterator ?为什么?。
list 、 dict 、 str 不是 Iterator ,因为Python的 Iterator 对象表示的是一个数据流,Iterator对象可以被 next() 函数调用并不断返回下一个数据,直到没有数据时抛出 StopIteration 错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过 next() 函数实现按需计算下一个数据,所
以 Iterator 的计算是惰性的,只有在需要返回下一个数据时它才会计算。

  1. 节约内存 2. 迭代到下⼀次的调⽤时,所使⽤的参数都是第⼀次所保留下的,在整个所有函数调⽤的参数都是第⼀次所调⽤时保 留的,⽽不是新创建的 对象
  2. 甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的那我们还可以通过 isinstance() 来判断是否是 Iterator 对象
    注意 Iterator 对象和 Iterable 对象,一个是迭代器,一个是可迭代对象
#目前为止只有生成器是可迭代器
def test2(arg):
    if isinstance(arg,Iterator):
        print("arg is Iterator")
    else:
        print("arg is not Iterator")
test2(a)
test2('')
test2(10)
test2((x for x in range(10)))

#把list , str  , dict编程迭代器
test2(iter(b))

run:

arg is not Iterator
arg is not Iterator
arg is not Iterator
arg is Iterator
arg is Iterator

所以可作用于 for 循环的对象都是 Iterable 类型;
可作用于 next() 函数的对象都是 Iterator 类型,它们表示一个惰性计算的序列;
惰性是指,在没有调用之前,内存中都不会保存数据,只有需要使用的数据时,才会再内存中,产生对象。
集合数据类型list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可以通过 iter() 函数获得⼀个 Iterator 对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python函数式编程——迭代器(2) 的相关文章

  • python:查找围绕某个 GPS 位置的圆的 GPS 坐标的优雅方法

    我有一组以十进制表示的 GPS 坐标 并且我正在寻找一种方法来查找每个位置周围半径可变的圆中的坐标 这是一个例子 http green and energy com downloads test circle html我需要什么 这是一个圆
  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 为什么从 Pandas 1.0 中删除了日期时间?

    我在 pandas 中处理大量数据分析并每天使用 pandas datetime 最近我收到警告 FutureWarning pandas datetime 类已弃用 并将在未来版本中从 pandas 中删除 改为从 datetime 模块
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 如何使用 opencv.omnidir 模块对鱼眼图像进行去扭曲

    我正在尝试使用全向模块 http docs opencv org trunk db dd2 namespacecv 1 1omnidir html用于对鱼眼图像进行扭曲处理Python 我正在尝试适应这一点C 教程 http docs op
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

随机推荐

  • 彻底解决安装包过程中的Requirement already satisfied:问题

    问题如图 安装库总是提示大量类似Requirement already satisfied paddle in f anapython lib site packages 1 0 2 的信息 对此问题 需要指定安装目录 格式 pip ins
  • oracle 存储过程的基本语法 及注意事项

    oracle 存储过程的基本语法 1 基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 参数1 IN NUMBER 参数2 IN NUMBER IS 变量1 INTEGER 0 变量2 DATE BEGIN E
  • 大学生必备的网址

    飞达简历网http www jianlishop com 精美的简历设计网站 大量XXXXX资源 无忧简历网http www 51jianli com 收费简历设计网站 我的简历http www wdjl net XXXXX提供电子简历 视
  • Weex加载数据缓冲旋转动画的实现

    Weex Ui已经上线了加载动画了点击这里跳转 手写的我眼泪都掉了下来 由于Weex手机端不支持gif图片 然而公司项目又要我加个加载动画 所以手写了一个动画加载组件 注意1 需要用到组件不会用组件的可以点击看看这篇文章 Weex Vue组
  • 操作系统考研复习——第四章(文件管理)

    操作系统考研复习 第四章 文件管理 4 文件管理 4 1 文件管理基础 4 1 1 文件的概念 1 数据项 记录和文件 2 文件属性 3 文件系统的接口 4 文件的基本操作 5 文件的打开与关闭 4 1 2 文件的逻辑结构 1 无结构文件
  • Java中的‘\’

    概述 斜杠 就士普通的字符 反斜杠 则在java中和不同的字符会组成不同的转义字符 斜杠 在Java中没有特别的意义 就代表一个 字符 反斜杠 则不然 它和紧跟它的字符构成转义字符 如 n 代表换行 例如 要写一个字符串 String s
  • Linux下搭建Hadoop环境---JDK安装

    这里安装JDK8 安装JDK8的方式有多中 在windows下下载压缩包 通过xftp上传到linux服务器 去官网下载Java Downloads Oracle 完了以后使用Xftp上传到linux服务器指定目录下 使用wget在本地下载
  • ES(Elasticsearch)中文检索使用笔记(一)

    1 什么是Elasticsearch 根据官网介绍 https www elastic co cn elasticsearch Elasticsearch 以下简称为ES 主要是一种基于JSON的分布式 高扩展 高实时的搜索与数据分析引擎
  • Qt之页面布局

    QTlayout概述 Qt的布局管理系统提供了强大的机制来自动排列窗口中的所有部件 确保它们有效地使用空间 Qt包含了一组布局管理类 从而在应用程序的用户界面中对部件进行布局 比如QLayout的几个子类 这里将它们称作布局管理器 所有QW
  • 基于SSM+JSP的学生信息管理系统

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SSM 前端 采用JSP技术开发 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Eclipse 是否Mave
  • 34-鼠标拖拽文件功能

    鼠标拖拽文件功能 直接拖动部分文件或者文件夹到tkinter窗口 实现快速添加文件功能 需要安装windnd库 demo如下 import tkinter as tk import windnd from tkinter messagebo
  • 数据库中系统数据库服务器,sql中什么是系统数据库服务器

    sql中什么是系统数据库服务器 内容精选 换一换 数据复制服务 Data Replication Service 简称DRS 是一种易用 稳定 高效 用于数据库实时迁移和数据库实时同步的云服务 数据复制服务围绕云数据库 降低了数据库之间数据
  • 【C语言】一篇博客带你弄懂最大公约数和最小公倍数

    目录 前言 什么是最大公约数和最小公倍数 最大公约数与最小公倍数的公式 求最大公约数方法 方法一 暴力穷举法 方法二 辗转相除法 方法三 更相减损术 求最小公倍数的方法 方法一 公式法 方法二 暴力穷举法 方法三 叠乘法 最后总结 前言 我
  • go语言基础-----23-----文件解析器goconfig

    1 文件解析器goconfig go的ini配置文件非常简单 看下面代码即可 运行之前需要go get go get github com Unknwon goconfig package main import fmt log githu
  • 基于Unittest框架写的自动化脚本右键运行出现 run “py.test for ...“的解决办法

    一 看图 python脚本都是 unittest 写的 但是 运行的时候没注意是 py test 就运行了 二 网上找了解决办法 说是要修改默认运行方式 进入 File Settings Tools Python Integrated To
  • Git:更改远程仓库指向(五)

    修改已有git仓库的远程仓库指向 git remote set url origin 仓库地址 git remote set url origin git github com test thinkphp git Tips 小程序云开发 中
  • SpringBoot项目部署

    Springboot项目部署有两种方式 分别为 打包为jar war jar包和war包到部署服务器的区别和优缺点 1 部署war包 1 将war包解压 将里面的内容放到服务器项目的目录下 2 重启服务器 启动tomcat的时间会有些长 约
  • QNX系统BSP开发研发与应用,QNX技术解答-项目开发-软件开发

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com 目前总结了一些
  • [LeetCode-27]-Remove Element (删除指定元素)

    文章目录 题目相关 Solution 题目相关 题目解读 使用In place 原地算法 从数组中删除指定值的所有元素 并返回删除后的数组长度 原题描述 原题链接 Given an array nums and a value val re
  • python函数式编程——迭代器(2)

    文章目录 前言 一 迭代器 前言 python学习笔记 仅供学习使用 一 迭代器 迭代是访问集合元素的 种 式 迭代器是 个可以记住遍历的位置的对象 迭代器对象从集合的第 个元素开始 访问 直到所有的元素被访问完结束 迭代器只能往前不会后退