每日一读:《关于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 saving space.
We say such an object is iterable, that is, suitable as a target for functions and constructs   that expect something from which they can obtain successive items until the supply is exhausted. We have seen that the for statement is such an iterator. The function list() is another; it creates lists from iterables:
翻译:
可以看到上面这个很奇怪, 在很多种情况下, range()函数返回的对象的行为都很像一个列表, 但是它确实不是一个列表,它只是在迭代的情况下返回指定索引的值, 但是它并不会在内存中真正产生一个列表对象, 这样也是为了节约内存空间。
我们称这种对象是可迭代的,或者是可迭代对象,还有一种对象叫迭代器, 它们需要从一个可迭代对象中连续获取指定索引的值, 一直到索引结束。list()函数就是这样一个迭代器,它可以把range()函数返回的对象变成一个列表。
总结:
range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。
list() 函数是对象迭代器,把对象转为一个列表。返回的变量类型为列表。
如:for i in range(1,5)在python2和python3中都可以使用,但是要生成1-5的列表, python3中就需要用list(range(1,5))。如下面的代码:
i=range(1,5)
print i
我们在python2.7中运行一切正常,和我们想要的结果是一致的。 返回的是一个列表:
[1, 2, 3, 4]
我们type(i)返回的是list,也是正确的。
但如果我们要在python3中,如果这样做呢?会和我们想要的结果一样吗?
我们把以上代码复制并在python3中运行。发现返回的是
range(1, 5)
而不是我们想要的结果:[1,2,3,5] 。这也就证明了在python3中,range返回的是一个迭代值。
而我们想要返回一个列表,我们就要这样做:
i=list(range(1,5))
print(i)
在range前面加多一个list函数。

原文地址:https://www.cnblogs.com/runpython/p/8832133.html

时间: 2024-10-06 12:12:28

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

有关python2与python3中关于除的不同

有关python2与python3中关于除的不同 python中2版本与3版本关于除的处理还是有一些差异的. 在python 2.7.15中除(/)是向下取整的,即去尾法. 123/10 # 结果 12 128/10 # 结果 12 在python 3中除(/)是相对于2版本精确了一些,例如: print(123/10) # 结果 12.3 原文地址:https://www.cnblogs.com/ZN-225/p/10574748.html

python2和python3中的编码问题

开始拾起python,准备使用python3, 造轮子的过程中遇到了编码的问题,又看了一下python3和python2相比变化的部分. 首先说个概念: unicode:在本文中表示用4byte表示的unicode编码,也是python内部使用的字符串编码方式. utf-8:在本文中指最少1byte表示的unicode编码方式 我在使用 if isinstance(key,unicode): key= key.encode('utf-8') 的时候,发现key值被转成了b'foo',b'bar'

Python2和Python3中print的不同点

在Python2和Python3中都提供print()方法来打印信息,但两个版本间的print稍微有差异 主要体现在以下几个方面: 1.python3中print是一个内置函数,有多个参数,而python2中print是一个语法结构: 2.Python2打印时可以不加括号:print 'hello world', Python3则需要加括号   print("hello world") 3.Python2中,input要求输入的字符串必须要加引号,为了避免读取非字符串类型发生的一些行为

Python2 和 Python3 中默认编码的差异

最近在使用 Python3.4 做一些脚本实现,发现对于编码的处理上和 Python2.6 有很大的不同,就此机会把相关知识做个梳理,方便需要的时候查阅. 先说下概念和差异: 脚本字符编码:就是解释器解释脚本文件时使用的编码格式,可以通过 # -\*- coding: utf-8 -\*- 显式指定解释器字符编码:解释器内部逻辑过程中对 str 类型进行处理时使用的编码格式Python2 中默认把脚步文件使用 ASCII 来处理(历史原因请 Google)Python2 中字符串除了 str 还

python2 与python3中最大的区别(编码问题bytes&str

1,在python2.x 中是不区分bytes和str类型的,在python3中bytes和str中是区分开的,str的所有操作bytes都支持 python2 中 >>> s = "abcdefg" >>> b = s.encode()    #或者使用下面的方式 >>> b = b"abcdefg">>> type(b)<type 'str'> python3中     #str

nose在python2与python3中的包的自动发现用例的区别

最近在使用python3,同样装了nose,发现自动发现用例总是有问题,如下面的代码结婚 testcase |------ __init__.py |------ test_bb.py test_bb.py中文件为: def test_qq(): pass Python3中: 再使用nose执行testcase提示: ----------------------------------------------------------------------Ran 0 tests in 0.001

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()函数返回的对象很像一个列表

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中的关键字的区别--keyword模块

一.python3.6中的: 共33个关键字: 通过导入keyword模块,查看python所有的关键字.在ipython中: Python 3.6.0 |Anaconda 4.3.1 (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)]Type "copyright", "credits" or "license" for more information.