Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python3中range函数的变化

python3中range函数的变化

作者头像
py3study
发布于 2020-01-09 07:51:33
发布于 2020-01-09 07:51:33
1K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

Introduction

今天写代码需要生成一个整数构成的list,于是很自然地想到range函数。可以当我将生成的内容传入一个需要list参数的函数中,奇怪的事情发生了,竟然提示传入的不是一个list。于是上网寻求解决方法,并进行验证。原来在python3中range的实现变了,并不是返回一个list类型,而是返回一迭代对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(type(range(1,4)))
# 输出:<class 'range'>
print(range(1,4))
# 输出:range(1, 4)
a = list(range(1,4))
print(type(a))
#输出:<class 'list'>
for i in range(1,4):
    print(i)
#输出:1 2 3

Explain

可以看到range()函数返回的是一个range对象。不过可以使用list()函数将其转换成list对象。range是一个可迭代的对象,可以使用for循环迭代输出。 貌似这样的设计很反人类,但是设计者这样设计,一定是为了某些特殊的原因。这种设计其实为了节省内存,官网有英文的说明。下面是一位网友给出的翻译。 在很多种情况下,range()函数返回的对象的行为都很像一个列表,但是它确实不是一个列表,它只是在迭代的情况下返回指定索引的值,但是它并不会在内存中真正产生一个列表对象,这样也是为了节约内存空间。

我们称这种对象是可迭代的,或者是可迭代对象,还有一种对象叫迭代器,它们需要从一个可迭代对象中连续获取指定索引的值,一直到索引结束。list()函数就是这样一个迭代器,它可以把range()函数返回的对象变成一个列表。

Summary

range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。 list() 函数是对象迭代器,把对象转为一个列表。返回的变量类型为列表。

参考文章:python3中的range函数

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
LV.0
这个人很懒,什么都没有留下~
加入讨论
的问答专区 >
1技术VP擅长5个领域
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    本文部分代码块支持一键运行,欢迎体验
    本文部分代码块支持一键运行,欢迎体验