python3中的range函数返回的是列表吗?

注意,这里说的Python3里面的range函数,和Python2是不同的,返回的不是列表,是可迭代对象

在python3中,如果执行下面的语句

print(range(10))

  

得到结果是 range(0,10) ,而不是期望的[0,1,2,3,4,5,6,7,8,9]。但是如果换一种方式

print(list(range(10)))

  

得到的结果却是

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  

那为什么会这样呢?其实在Python3中range()函数返回的对象很像一个列表,但是它确实不是一个列表,它只是在迭代的情况下返回指定索引的值,它并不会在内存中产生一个列表对象,官方解释说这样做是为了节约内存空间。通常我们称这种对象是可迭代的,或者是可迭代对象。

这里就要引入另外一个叫迭代器的概念,迭代器可以从一个可迭代对象中连续获取指定索引的值,直到索引结束。比如list()函数,所以在上面的例子中,我们可以用list()这个迭代器将range()函数返回的对象变成一个列表。

由此可以看出:range()函数返回的是一个可迭代对象(类型是对象),而不是列表类型;list() 函数是对象迭代器,把对象转为一个列表,返回的变量类型为列表。

原文地址:https://www.cnblogs.com/allenblogs/p/10344814.html

时间: 2024-09-28 16:31:20

python3中的range函数返回的是列表吗?的相关文章

python3中的range函数

奇怪的现象 在paython3中 print(range(10)) 得出的结果是 range(0,10) ,而不是[0,1,2,3,4,5,6,7,8,9] ,为什么呢? 官网原话: In many ways the object returned by range() behaves as if it is a list, but in fact it isn’t. It is an object which returns the successive items of the desire

每日一读:《关于python2和python3中的range》

官网原话是这么说的:In many ways the object returned by range() behaves as if it is a list, but in fact it isn't. It is an object which returns the successive items of the desired sequence when you iterate over it, but it doesn't really make the list, thus sav

linux编程中接收主函数返回值以及错误码提示

程序A创建子进程,并调用进程B,根据不调用的不同情况,最后显示结果不同. #include <stdio.h> #include <unistd.h> #include <sys/wait.h> #include <sys/types.h> #include <errno.h> int main() { pid_t pid, rpid; int stat; if ((pid = fork()) < 0) { perror("for

Python3基础9——range()函数

Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表 list() 函数是对象迭代器,可以把range()返回的可迭代对象转为一个列表,返回的变量类型为列表. 函数语法:range(start,end,[step]) 参数含义:start:计数从start开始.默认是从0开始.例如range(5)等价于range(0, 5); end:计数到end结束,但不包括end.例如:range(0, 5) 是[0, 1, 2, 3, 4]

python3中的 zip()函数 和python2中的 zip()函数 的区别

python3中的 zip()函数 和python2中的 zip()函数 的区别: 描述: zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象. 如果各个可迭代对象的元素个数不一致,则返回的对象长度与最短的可迭代对象相同. 利用 * 号操作符,与zip相反,进行解压. zip() 函数语法: zip(iterable1,iterable2, ...) 参数说明: iterable -- 一个或多个可迭代对象(字符串.列表.元祖.字典) 返回

Python3中的super()函数详解

关于Python3中的super()函数 我们都知道,在Python3中子类在继承父类的时候,当子类中的方法与父类中的方法重名时,子类中的方法会覆盖父类中的方法, 那么,如果我们想实现同时调用父类和子类中的同名方法,就需要使用到super()这个函数,用法为super().函数名() 下面是一个例子: class A1(): def go(self): print("go A1 go") class A2(): def go(self): print("go A2 go&qu

为什么print在python3中变成了函数?

转自:http://www.codingpy.com/article/why-print-became-a-function-in-python-3/ 在Python 2中,print是一个语句(statement):而在Python 3中变成了函数(function).很多Python用户都会问,为什么Python 3将print变成了函数呢?本文就是Python核心开发者Brett Cannon对此的解释. 今年初Python决定迁移到Github,就是由Brett Cannon征求Pyth

【Tips】Python 针对函数返回值实现列表推导

背景 设想这样一个场景,我们定义函数foo来生成一个大于0的随机code.但是函数执行可能会出现异常,对于异常情况我们指定函数返回-1. 在批量处理的情况下,我们想要得到所有成功执行的foo函数的返回值集合,而忽略返回-1的情况.基本的逻辑如下: result = [] for item in item_lst: code = foo(item) if code != -1: result.append(code) 使用列表推导的解决方案 如果想用列表推导的方式实现,有下面几种解决方案: Sol

python3中的filter()函数

filter() 函数是一个对于可迭代对象的过滤器,过滤掉不符合条件的元素,返回的是一个迭代器,如果要转换为列表,可以使用 list() 来转换.该函数接收两个参数,第一个为函数的引用或者None,第二个为可迭代对象,可迭代对象中的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到迭代器中下面看下fiter()的用法:第一个参数为None: [Python] 纯文本查看 复制代码 ? 1 2 3 4 my_list = [1, '', 2, '