首页 > 编程语言 >python 迭代器

python 迭代器

时间:2023-05-23 10:44:31浏览次数:32  
标签:迭代 python sum yield next item print

迭代器

迭代器的理解,学过Java的都是知道的,java也是都是由迭代器的,而且是一种设计思想,实际上。可以把迭代器理解成一种特殊的 list + function实际上,迭代器是一个特殊的函数

迭代器的特性

  1. 可迭代的
  2. 使用next这个内置函数来移动内部的下一个指针
  3. 通过 for 遍历的时候实际也是调用 next,遍历结束,意味着使用 next 的次数已经超出

迭代器的创建方法

  1. 将列表生成表达式 [] 换成 () 之后我们得到的就是一个 generator()
g = (x for x in range(1,11)) # 这样,我们的g就是一个迭代器
  1. 类似函数,但是使用 yield 关键字
def t_yield():
    yield 0
    yield 1
    yield 2
    yield 3


g = t_yield()
for item in g:
    print(item)

上面的代码里面,我们每次调用一次 next() 函数,g就会返回一个 yield 后面的值

迭代器是函数,怎么获取返回值

正常情况下,next 可以获取迭代器的下一个值,既然能够获取下一个值,就说明这个迭代器函数就还没有结束,因此我们要获取返回值,就需要迭代器的 yield 都已经结束了

def t_yield():
    _sum = 0
    for i in range(0, 2):
        _sum += i
        yield i
    return _sum


# 正常便利,遍历结束意味着 next 指针已经指向了最后,再次执行将会返回(报错)
g = t_yield()
for item in g:
    print(item)

try:
    a = next(g)
except StopIteration as e:  # 实际的错误是 StopIteration
    print(e.value)          # None ??? 为什么

再看看下面的结果

def t_yield():
    _sum = 0
    for i in range(0, 2):
        _sum += i
        yield i
    return _sum


# 正常便利,遍历结束意味着 next 指针已经指向了最后,再次执行将会返回(报错)
g = t_yield()
next(g)
next(g)

try:
    a = next(g)
except StopIteration as e:  # 实际的错误是 StopIteration
    print(e.value)          # 2

标签:迭代,python,sum,yield,next,item,print
From: https://www.cnblogs.com/sqmw/p/17422602.html

相关文章

  • python之禅 代码规范
    触发方法:在python解释器中输入importthis Python之禅byTimPeters() 优美胜于丑陋(Python以编写优美的代码为目标)明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)复杂胜于凌乱(如果复杂不可避免,那代码间......
  • Linux 升级安装 Python3
    下载#安装依赖[root@localhost~]#yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devellibffi-devel#下载Python3.8【可以用讯雷下好,拖到Linx中】[root@localhos......
  • Python多线程爬虫又来了
    Python多线程的主要好处是可以在单个程序中同时执行多个任务,从而提高应用程序的性能和效率。具体来说,多线程有以下几个优点:提高CPU利用率:通过多线程,可以更充分地利用CPU资源,尤其适用于计算密集型的任务。降低IO阻塞:对于需要等待IO操作完成的任务(如网络请求或文件读写),将它们放入......
  • 代码随想录算法训练营第14天 | ● 理论基础 ● 递归遍历 ● 迭代遍历 ● 统一迭代 -
     第六章二叉树part01今日内容:  ●  理论基础●  递归遍历  ●  迭代遍历●  统一迭代   详细布置   理论基础  需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义  文章讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%......
  • Python自动化办公对每个子文件夹的Excel表加个表头(Excel不同名)(上篇)
    大家好,我是皮皮。一、前言上一篇文章,我们抛出了一个问题,这篇文章来进行解答。如果针对子文件夹下不同的Excel表名,应该如何处理?二、实现过程我们继续问ChatGPT,它给出了一个方法,如下所示:提问如下:假如你是一名Python程序员,现在你有一个自动化办公的需求,你桌面上有一个新建文件夹......
  • python的私有属性
    对于python来说,其并没有像C#、Java那样使用关键字的形式对变量进行访问控制而是使用左至少两个下划线,右至多一个下划线的形式(__kwargs)表明一个变量是私有变量第一种场景,没有使用私有变量,结果与预期有出入,结果输出b3而在我们的预期中,子类传入两个kwargs,子类的init函数对kwarg......
  • centos升级python到3.8
    环境:centos7.9一、卸载自带python3.7#卸载python3rpm-qa|greppython3|xargsrpm-ev--allmatches--nodeps#删除所有残余文件whereispython3|xargsrm-frv#查看现有安装的python,验证是否删除干净whereispython二、安装python3.8前置依赖yuminstallzl......
  • python day08 字典、元组、集合内置方法
    字典的内置方法定义方式d={'usernamne':"kevin"}定义空字典:d={}1.key取值dic={'name':'kevin','age':18,'hobbies':['playgame','basketball']}print(dic['name'])#kevinp......
  • 用Python开发输入法后台(3)——我自己的输入法的规则
    我的输入法基本开发完成了,如下所示:  现在总结一下我的输入规则:1.用户输入几个字符,就代表几个字的词.比如输入'w'表示以w开头的单字词,输入wm,表示拼音首字母开头的双字词,gsm表示拼音首字母开头的3字词; 2.输入分号,表示词的个数已固定,需要进一步筛选;同时......
  • python调用父类方法的三种方式(super调用和父类名调用)
    子类调用父类的方法的三种方式:父类名.方法名(self)super(子类名,self).父类方法名()super().父类方法名注意:super()通过子类调用当前父类的方法,super默认会调用第一个父类的方法(适用于单继承的多层继承如下代码:#自定义师傅类-古法classMaster(object):#方......