首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么range不是迭代器?range到底是什么类型?

这就是存在知识误区地方。 for-循环 遍历时,可迭代对象与迭代性能是一样,即它们都是惰性求值空间复杂度与时间复杂度上并无差异。...为什么不更规范点,令 range() 生成迭代器呢? 关于这个问题,没找到官方解释,以下纯属个人观点 。...欢迎就这个话题与我探讨。 3、range 类型是什么? 以上是为什么range()不产生迭代器”一种解答。...4、小结 回顾全文,得到了两个偏冷门结论:range 是可迭代对象而不是迭代器;range 对象是不可等差序列。 若单纯看结论的话,你也许没有感触,或许还会说这没啥了不得啊。...但如果追问,为什么 range 不是迭代器呢,为什么 range 是不可变序列呢?这俩问题,你是否还能答出个自圆其说设计思想呢?

84870

迭代对象 python_列表是可迭代对象吗

引出问题: ​如下面所示,存在一个类,并且产生了一个对象,现在想用for循环实现对象迭代,结果报错了 # -*- coding: utf-8 -*- """ 演示一个类是不可迭代 结果存在报错信息...​说明对象是不可以进行迭代,那么如何实现对象可以迭代呢 ​迭代思路逻辑 # -*- coding: utf-8 -*- from time import sleep """ 如下为迭代学习思路梳理...: 后面是具体代码实现,没有把每一个步骤都进行截图和代码分享,望谅解 (1)一个类中加入__iter__f (self) 方法变成可迭代 并返回如下错误,说明是类型不正确,但是已经能够发生迭代了...说明已经变成了可以进行迭代,只是返回值不正确而已 (4)(3)基础上加上一个正确返回值,做如下修改 def __next__(self): return "zhangsan" 得到结果为不是...: (1)一个类中加入__iter__f (self) 方法变成可迭代 并返回如下错误,说明是类型不正确,但是已经能够发生迭代了 for i in A: TypeError: iter() returned

89650
您找到你想要的搜索结果了吗?
是的
没有找到

从 Python 魔法方法说开去

一天群里看到这样一个有意思 Python 现象: >>> import os >>> r=os.popen('ls') >>> r....: '_wrap_close' object is not an iterator >>> 如果你 Python 魔法方法有所了解,就能发现这里奇怪之处:popen对象有__next__()方法...然而,_wrap_close却定义了__getattr__()魔法方法,这样所有其他找不到属性、方法就会传递给self._stream对象,而这个对象有__next__()方法。这就解释了为什么r....问题解决了,我们可以得到下面的推论: 动态修改(或者叫 monkey patch)一个实例魔法方法,是不生效。 看下面的例子: >>> class Foo: pass ......用 Python 时间不可谓不短,也自认 Python 语言特性比较了解了,但 Python 却总能时不时让意外一下,这是什么情况?

14620

人人都能看懂迭代器、生成器」入门指南!

不过了解生成器之前,又必须了解什么是迭代器,但在搞明白迭代器之前,你总要知道什么是可迭代对象吧。 下面就让我们按照这个思路,来一点一点前进吧。...1.3 对象可迭代原因 现在相信你应该「可迭代对象」这个名词有一个大致了解,为了加深理解,我们继续研究为什么一个对象是可以迭代!...如果两个方法都没有,则会抛出 TypeError 异常,提示该对象不可迭代 所以「含有 __iter__() 方法或 __getitem__() 方法对象称之为可迭代对象」 让我们来验证上一节定义...list是否有这两个方法 答案是肯定,当然Python中有专门方法去检查一个对象是否可迭代,例如isinstance() >>> from collections import Iterable...其实看到这里,很多人都会和我一样想,迭代器它到底有什么用或者说什么场景下应该使用迭代器呢?

32320

Python进阶:全面解读高级特性之切片!

导读:切片系列文章连续写了三篇,本文是它们做汇总。为什么要把序列文章合并呢?...在此说明一下,本文绝不是简单地将它们做了合并,主要是修正了一些严重错误(如自定义序列切片部分),还对行文结构与章节衔接做了大量改动,如此一来,本文结构完整性与内容质量都得到了很好保证。...那怎么判断一个对象是否可迭代呢?为什么它们是可迭代呢?怎么让一个对象可迭代呢?...对此,想到一个比方:普通可迭代对象就像是子弹匣,它遍历就是取出子弹,完成操作后又装回去,所以可以反复遍历(即多次调用for循环,返回相同结果);而迭代器就像是装载了子弹匣且不可拆卸枪,进行它遍历或者自遍历都是发射子弹...:即允许你一个无穷系统支持范围内)迭代器进行切片能力。

91240

新手常见Python错误及异常解决处理方案

写Python代码小伙伴不可避免地会遇到代码执行错误和异常,这次就来详细且不失通俗地总结一下python中错误和异常。 先抛出两个问题: 什么是Python错误和异常?...for循环没加‘:’ 上面示例可以看到,针对语法错误,python解析器会输出错误那一行,并且最先找到错误位置标记了一个箭头。  ...熟悉python语法,可以避免语法错误,但是代码常会发生异常(Exception)。还是两个问题: 2.异常是什么?  异常和语法错误有什么区别呢?...表达式open(‘poem.txt’)返回是一个_io.TextIOWrapper 类型变量赋给f。 with语句块中就可以使用这个变量操作文件。...8、总结 本文详细且清晰地讲解了Python中错误和异常概念及其处理方式, 通过具体案例展示try…except、try…finally、with…等句式具体用法, 以上就是本文全部内容,希望大家学习有所帮助

1.2K20

Python编程常见问题与解答

答:目前来看,Anaconda3和PyCharm用相对来说多一些。 3.问:在哪里执行pip命令安装Python扩展库?为什么IDLE中执行会提示语法错误呢?...11.问:代码中x是一个列表,使用y=x.sort()语句把它排序结果赋值给y,然后使用y.index(3)查看3y中下标时,为什么会提示“AttributeError: 'NoneType...答:Python中,元组和字符串这样容器类对象是不可,不支持其中元素增加、修改和删除操作。...19.问:已知x是一个字符,想使用x+1得到下一个字符,为什么提示“TypeError: can only concatenate str (not "int") to str”呢?...答:应该是文件具有“只读”之类特殊属性,或者当前登录用户账号没有权限访问该文件。 24.问:机器上明明是有test.txt这个文件为什么使用内置函数open()打开时提示文件不存在呢?

3.4K10

一文搞懂Python错误和异常

写Python代码小伙伴不可避免地会遇到代码执行错误和异常,这次就来详细且不失通俗地总结一下python中错误和异常。 先抛出两个问题: 什么是Python错误和异常?...如下: 多任务写成一行 for循环没加‘:’ 上面示例可以看到,针对语法错误,python解析器会输出错误那一行,并且最先找到错误位置标记了一个箭头。...遇到错误,会引发异常。 如果异常对象并未被处理或捕捉,程序就会用所谓回溯(traceback, 一种错误信息)终止执行。 异常和语法错误有什么区别呢?...结合上面的示例,处理异常规则是:把执行语句放在 try 代码块中,将错误处理器代码放置 except 代码块中,except会引发ZeroDivisionError异常来提醒Coder,这段代码错误是零不能作为被除数...表达式open('poem.txt')返回是一个_io.TextIOWrapper 类型变量赋给f。 with语句块中就可以使用这个变量操作文件。

94910

Python-for循环内部机制

Python中,使用for循环可以迭代容器对象中元素,这里容器对象包括是列表(list)、元组(tuple)、字典(dict)、集合(set)等。但是,为什么这些对象可以使用for循环进行操作呢?...: 'TestRange' object is not iterable 错误信息提示,’TestRange’ object 不是可迭代对象。...那么,什么才是可迭代对象呢? 迭代对象中,需要实现一个__iter__魔法方法,而且这个方法返回值需要是一个迭代器。那么,什么是迭代器呢? 迭代器只需要实现__next__魔法方法。...不断调用__next__过程中,就是不断返回nums中元素,直到出现StopIteration错误。 其实,for语句作用与此类似。...for语句内部机制为: 先判断对象是否为可迭代对象,即是否存在__iter__方法,如果存在则调用__iter__方法,返回一个迭代器;否则,直接抛出TypeError异常; 不断地调用迭代__next

41720

Python 迭代器 - Iterable对象

: 'int' object is not iterable In [2]: 从上面可以看到错误提示TypeError: 'int' object is not iterable,提示int并不是迭代类型...可迭代对象本质 我们分析迭代对象进行迭代使用过程,发现每迭代一次(即在for...in...中每循环一次)都会返回对象中下一条数据,一直向后读取数据直到迭代了所有数据结束。...可迭代对象通过__iter__方法向我们提供一个迭代器,我们迭代一个可迭代对象时候,实际上就是先获取该对象提供一个迭代器,然后通过这个迭代器来依次获取对象中每一个数据....6. for...in...循环本质 for item in Iterable 循环本质就是先通过iter()函数获取可迭代对象Iterable迭代器,然后获取到迭代器不断调用next()方法来获取下一个值并将其赋值给...item,当遇到StopIteration异常循环结束。

2.1K30

Python快速学习第七天

到现在为止只for循环序列和字典进行过迭代,但实际上也能对其他对象进行迭代:只要该对象实现了__iter__方法。...9.6.2 从迭代得到序列 除了迭代器和可迭代对象上进行迭代(这是经常做)外,还能把它们转换为序列。...基本情况中,函数被告知展开一个元素(比如一个数字),这种情况下,for循环会引发一个TypeError异常(因为试图一个数字进行迭代),生成器会产生一个元素。...试着将传入对象和一个字符串拼接,看看会不会出现TypeError,这是检查一个对象是不是类似于字符串最简单、最快速方法(感谢Alex Martelli指出了这个习惯用法和在这里使用重要性)。...注意,使用send方法(而不是next方法)只有在生成器挂起之后才有意义(也就是说yield函数第一次被执行)。如果在此之前需要给生成器提供更多信息,那么只需使用生成器函数参数。

2.2K50

前端面试题合集

协议发送方要确认接收方是否收到数据段(3次握手协议)TCP协议采用窗口技术和流控制图片浏览器缓存机制理解浏览器缓存全过程:浏览器第一次加载资源,服务器返回 200,浏览器从服务器下载资源文件,...setTimeout 为宏任务,由于 JS 中单线程 eventLoop 机制,主线程同步任务执行完才去执行宏任务,因此循环结束 setTimeout 中回调才依次执行因为 setTimeout...,有哪几种方式可以得到想要答案?...第二种是 AMD 方案,这种方案采用异步加载方式来加载模块,模块加载不影响后面语句执行,所有依赖这个模块语句都定义一个回调函数里,等到加载完成再执行回调函数。...谈谈模块化开发理解模块理解是,一个模块是实现一个特定功能一组方法。最开始时候,js 只实现一些简单功能,所以并没有模块概念,但随着程序越来越复杂,代码模块化开发变得越来越重要。

74820

迭代器Python_python进阶路线

for i in 100: print(i) >>> TypeError: 'int' object is not iterable 以上我们可以看出,int整型不是iterable,即int整型是不可迭代...我们分析迭代对象进行迭代使用过程,发现每迭代一次(即在for…in…中每循环一次)都会返回对象中下一条数据,一直向后读取数据直到迭代了所有数据结束。...可迭代对象通过__iter__方法向我们提供一个迭代器,我们迭代一个可迭代对象时候,实际上就是先获取该对象提供一个迭代器,然后通过这个迭代器来依次获取对象中每一个数据....StopIteration异常循环结束。...现在我们想要通过for…in…循环来遍历迭代斐波那契数列中前n个数。那么这个斐波那契数列我们就可以用迭代器来实现,每次迭代都通过数学计算来生成下一个数。

22520

TypeError: object()

日常编写Python代码过程中,特别是Python新手,经常会遇到这样错误TypeError: object() takes no parameters 对于上面这个错误,很容易迷惑我们,因为这个错误信息没有很明确指出...然而,python方法是定义一个class里,而不是object里。也就是说如果m是o方法,那就不可能是它属性。...如果属性在对象里不存在,我们会得到一个错误信息,指明了哪个地方代码有问题和出问题原因,但是和我们上面说错误 TypeError: object() takes no parameters 这个错误创建对象实例时报错误...,例如: class Foo(object): pass 如果这样: f = Foo() 就不会有任何问题,但是如果这样: f = Foo(10) 然后就会得到上面的错误,这究竟是为什么了...这是因为Python创建对象是,分为两个阶段:第一个阶段,对象是通过调用__new__方法来创建这个方法细节我们基本上不用关心。

1K30

【python系统学习08】for循环知识点合集

for循环 目录: for简介代码格式语法格式可被迭代数据类型列表字典字符串不可迭代数据类型整数浮点值布尔值空值整数转化为范围可被迭代range(y)range(x, y)range(x, y...# ^ 不可迭代数据类型 整数、浮点数皆不可迭代,如果强行遍历会发生错误: 整数 整数对象不是可迭代: numberValue = 2020 for num in numberValue: #...: # TypeError: 'NoneType' object is not iterable   print(n) 整数转化为范围可被迭代 虽然直接for循环整数,会发生错误。...那么如果迭代字典时,有个变量存放列表中各项所对应偏移量(索引)呢? 通过range函数搭配,我们不仅可以迭代整数,还能迭代列表索引。 于是就试了下边写法,但是他报错了。...for循环else 可以看打印结果得知,满足i==3条件之后,直接跳出了当次循环没有打印3这个数字。

1.3K60

异步发展流程-手摸手带你实现一个Promise

并且异步操作存在以下三个问题 1、异步没法捕获错误 2、异步编程中,可能存在回调地狱 3、多个异步操作,同一时间内,如何同步异步结果? 回调地狱大家应该非常熟悉了。...fn() }) }, on (fn) { this.arr.push(fn) } } 不了解发布订阅模式请移步另一篇博客 通过以下操作即可达到预期 let schoolInfo..., x, resolve, reject) { // 这个处理函数 需要处理逻辑韩式很复杂 // 有可能这个x 是一个promise 但是这个promise并不是自己...] is not a function 以上代码地址 可得知对象是不能被迭代,根据报错信息,我们再改进代码 let o = { 0: 1, 1: 2, 2: 3, length: 3, [Symbol.iterator...flag) // => node // react // vue // undefined 以上代码地址 迭代器提供next方法,可得出迭代value和是否已经迭代完成done,用一个循环即可遍历

90320

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券