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

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

2 3 4 对于 range() 函数,有几个注意点:(1)它表示的是左闭右开区间;(2)它接收的参数必须是整数,可以是负数,但不能是浮点数等其它类型;(3)它是不可变的序列类型,可以进行判断元素、查找元素...zip() 等方法都需要接收确定的可迭代对象的参数,是对它们的一种再加工的过程,因此也希望马上产出确定的结果来,所以 Python 开发者就设计了这个结果是迭代器。...这样还有一个好处,即当作为参数的可迭代对象发生变化的时候,作为结果的迭代器因为是消耗型的,不会被错误地使用。...例如,zip() 等方法就完全可以接收 range 类型的参数。...>>> for i in zip(range(1,6,2), range(2,7,2)): >>> print(i, end="") (1, 2)(3, 4)(5, 6) 也就是说,range()

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

    Python内置函数iter()语法及应用

    iter()函数用来返回指定对象的迭代器,有两种用法:iter(iterable)和iter(callable, sentinel),前者要求参数必须为序列或者有自己的迭代器,后者会持续调用参数callable...next()函数用来返回可迭代对象中的下一个元素,同样适用于生成器对象以及zip、enumerate、reversed、map、filter、iter等对象,等价于这些对象的__next__()方法。...>>> x = [1, 2, 3] >>> next(x) TypeError: 'list' object is not an iterator #根据列表创建迭代器对象 >>> y = iter(x...) >>> next(y) 1 >>> next(y) 2 >>> x = range(1, 100, 3) #range对象不是迭代器对象 >>> next(x) TypeError: 'range'...__data) >>> t = T(range(3)) #对象t不可迭代 >>> next(t) TypeError: 'T' object is not an iterator #根据t创建迭代器对象

    1.2K60

    python 基础内置函数表及简单介绍

    iterable 必须是一个序列,一个迭代器或其他支持迭代的对象。...如果没有第二个参数,object 必须是支持迭代协议(__iter__() 方法)的集合对象,或者它必须支持序列协议(整数参数从 0 开始的 __getitem__() 方法)。...如果它不支持这两种协议,则会引发 TypeError。如果给出了第二个参数 sentinel,那么 object 必须是可调用的对象。...zip(*iterables) 制作一个迭代器,用于聚合来自每个迭代器的元素。 返回元组的迭代器,其中第 i 个元组包含来自每个参数序列或迭代的第 i 个元素。...当最短的输入迭代耗尽时,迭代器停止。使用单个迭代参数,它将返回 1 元组的迭代器。没有参数,它返回一个空的迭代器。

    1.3K20

    Python 3.10 的首个 PEP 诞生,内置类型 zip() 将迎来新特性

    当启用时,如果其中一个参数先被用尽了,则会引发 ValueError 。 动机 从作者的个人经验和一份对标准库的调查 来看,明显有很多(如果不是绝大多数)zip 用例要求可迭代对象必须是等长的。...这个新参数的想法和名称最初是由 Ram Rachum 提出的。该议题收到了 100 多个回复,而候选的“equal”也获得了相近的支持数。...调用内置类 zip 时,如果参数的长度不同,则生成的迭代器会引发 ValueError。...这个异常就发生在迭代器正常停止迭代的地方。 向上兼容 此项更改是完全向上兼容的。当前的 zip 不接受关键字参数,默认省略 strict 的“非严格”用法会保持不变。...参数类型错误时抛出 TypeError(如果 iters 只包含一个元素,不是一个 zip 迭代器)。 否则,参数数量不对时抛出 TypeError。

    75130

    《流畅的Python》第十四章学习笔记

    检查对象能否迭代 调用iter(x)函数,如果不可迭代,再处理TypeError异常 可迭代对象与迭代器 Python从可迭代的对象中获取迭代器 迭代器可以迭代,但是可迭代对象不是迭代器 s = 'ABC...序列都可以迭代;实现了__getitem__方法,而且其参数是从0开始的索引,这种对象也可以迭代 迭代器 实现了无参数的__next__方法,返回序列中的下一个元素。...也就是 可迭代对象必须实现__iter__方法,但不能实现__next__方法 迭代器模式可以用来 访问一个聚合对象的内容而无需暴露它的内部表示 支持对聚合对象的多种遍历 为遍历不同的聚合结构提供一个统一的接口...「支持多态迭代」 生成器 生成器函数是生成器工厂 函数的定义中有yield关键字,该函数就是生成器函数。...itN) itertools.chain.from_iterable(it1) itertools.product(it1, …, itN, repeat=1) zip(it1, …, itN) itertools.zip_longest

    59520

    python初步

    在3.x中,map()、filter()和zip()函数用返回迭代器替代了列表。 5.比较运算中的改变 比较运算的主要改变如下。 用!=替代了。...带前缀”u”或者”U”的字符串为unicode类型,其他的字符(包括带前缀”b” ”B” “r”或”R”的字符串)为str类型。所有的字符串在输出时会将包含的字符直接输出。...使用nonlocal x 声明x为函数外部的变量。 删除了raw_input(),用input()代替。 去除元祖参数解包。不能像def(a,(b,c)):pass这样定义函数了。...bin()函数可返回整数的二进制字符串。 扩展了可迭代解包。在Python3.x里,”a,b *x=seq”和”X,a=seq”都是合法的,只要求两点”x”是list。 对象和“seq”是可迭代的。...类的迭代器方法next()改名为_next_(),并增加内置函数next(),用以调用迭代器的_next_()方法。

    9010

    Python内置函数功能汇总

    4 如果提供了参数radix,但参数x并不是一个字符串,将抛出TypeError异常; 5 否则,参数x必须是数值(普通整数,长整数,浮点数)。通过舍去小数点来转换浮点数。...3 如果没有提供第二个参数,参数o必须是一个集合对象,支持遍历功能(__iter__()方法)或支持序列功能(__getitem__()方法), 4 参数为整数,从零开始。...如果不支持这两种功能,将处罚TypeError异常。 5 如果提供了第二个参数,参数o必须是一个可调用对象。...3 如果有多个iterable参数,那么fuction函数必须接收多个参数,这些iterable中相同索引处的元素将并行的作为function函数的参数。...参数seq必须是一个包含__reversed__()方法的对象或支持序列操作(__len__()和__getitem__()) 3 该函数是2.4中新增的 55. round()  四舍五入 1 round

    77000

    Python进阶-内置函数大全

    .credits() 支持 #16.delattr() 删除对象的属性 #17.dict() 创建数据字典 dict(a=1) >>> {'a': 1} #18.dir() 不带参数时返回当前范围内的变量...,方法和定义的类型列表,带参数时返回参数的属性,方法列表 #19.divmod() 分别取商和余数 divmod(5,2) >>> (2, 1) #20.enumerate() 返回一个可以枚举的对象...参数function:返回值为True或False的函数,可以为None 参数iterable:序列或可迭代对象 ''' >>> filter(lambda x:x+1,[1,2]) 参数base,但参数x并不是一个字符串,将抛出TypeError异常; 否则,参数x必须是数值(普通整数,长整数,浮点数)。通过舍去小数点来转换浮点数。...iterable中的每个元素都应用fuction函数,并将结果作为列表返回 ''' 如果有多个iterable参数,那么fuction函数必须接收多个参数,这些iterable中相同索引处的元素将并行的作为

    1.1K21

    Python内置函数详解【翻译自pyth

    iterable 必须是一个序列、一个迭代器,或者其它某种支持迭代的对象。...没有第二个参数,object必须是一个支持迭代协议(__iter__()方法)的容器对象,或者它必须支持序列协议(从 0开始的整数参数的__getitem__() 方法)。...如果它不支持这些协议任何一个,将引发TypeError。如果给出第二个参数sentinel,那么object必须是一个可调用的对象。...zip(*iterables) 创建一个迭代器,聚合来自每个迭代器的元素。 返回一个由元组构成的迭代器,其中第i个元组包含来自每一组参数序列或可迭代量的第i元素。当最短输入可迭代被耗尽时,迭代器停止。...使用单个可迭代参数,它返回1元组的迭代器。没有参数,它返回一个空迭代器。

    1.5K20

    用4个简单的函数提升for循环

    zip()函数 第四个内置函数是zip(*iterables),可以用一个或多个可迭代对象作为参数,会返回一个迭代器对象,并且将参数中的可迭代对象的元素对应合并,合并后的元素以元组形式组合,如合并后的第...1个元组中包含作为参数的每个可迭代对象中的第1个元素。...一个需要注意的是,zip()函数返回的迭代器对象的长度,是以参数中最短的可迭代对象为准。...例如下面的示例,两个字符串的长度不同,最后得到的迭代器对象只有3个元组,并且,必须用list()函数对迭代器对象进行转换,才能显示其具体内容。...sorted()函数能够对任何可迭代对象进行排序,并且可以灵活地指定任何排序关键词。 zip()函数主要用于组合可迭代对象中对应的元素,并返回一个迭代器对象。

    82170

    【Python2】03、Python对象

    字符和元组属于不可变序列,而列表则支持插入、删除和替换元素 所有序列都支持迭代 如果要使用unicode编码,则在字符之前使用字符u进行标识,如u“magedu” 文档字符串:模块、类或函数的第一条语句是一个字符串的话...m.next():遍历迭代器对象 m.viewitems() m.viewkeys() m.viewvalues() zip() In [43]: zip Out[43]: zip...6、集合类型 无序排列,可哈希,支持集合关系测试,不支持索引,元素获取、切片 没有特定语法格式:只能通过工厂函数创建 In [48]: s1=set() In [49]: s1 Out[49]: set...=set([1,2,3])      #集合的元素要支持迭代的 In [54]: s2 Out[54]: {1, 2, 3} In [55]: print s2 set([1, 2, 3]) In...4)所有序列都支持迭代  5)所有序列都支持的操作和方法         s[i]         s[i:j]         s[i:j:stride]         len(s)

    1K20

    流畅的 Python 第二版(GPT 重译)(八)

    对我来说,这是一个非常直观的描述。 但如果我必须为以这些术语描述的函数注释,我必须问:它是哪个?一个可迭代对象还是两个或更多参数?...输入是: 任何类型 T 的项目的可迭代对象 接受类型为T的参数并返回实现SupportsLessThan的类型LT的值的可调用函数 任何类型DT的默认值 max的返回类型必须是类型T或...如果你通过鸭子类型的视角查看示例 15-8 中to_xml的代码,那么参数book必须提供一个返回类似(key, value)元组可迭代对象的.items()方法,其中: key 必须有一个 .upper...=0.0) TypeError: zip_longest argument #2 must support iteration 更糟糕的是,如果一个操作数是可迭代的,但其项无法添加到Vector中的float...Python 3.10 中的新 zip() 特性 zip 内置函数自 Python 3.10 起接受一个strict关键字参数。

    24210

    python学习笔记4.2-python高级之迭代器

    与普通函数不同的是生成器只会在响应迭代操作的时候才能运行。 3 实现迭代协议 构建一个自定义的对象,希望能够支持迭代操作,也就是实现一种迭代协议。...(a,3): print(p) itertools.combinations()函数必须提供排列的长度参数,同时她是忽略顺序的,也就是(‘ a’,'b','c')和('a','c','b')是同一组合...zip()函数是Python中的一个打包函数,其功能是将多个对象打包成一个元祖,例如有两个可迭代对象,zip之后就是一个(xi,yi)的元组对象。整个迭代长度和最短的输入序列长度相同。...(a,b) 如果说我想迭代长度和最长的输入序列相同,可以利用itertools.zip_longest()函数来实现。..., (None, 'hhhh')] [(0, 'a'), (2, 'b'), (4, 'c'), (6, 'f'), (8, 'm')] 当然zip()函数还可以接受更多的参数,也还具有其他的很多功能

    872100
    领券