我是靠谱客的博主 生动薯片,最近开发中收集的这篇文章主要介绍Python range知识点总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Python中range经常被用到生成序列。

1、range在Python 2.7* 和Python 3.*中是不同的东西。

Python2中range是内嵌函数,返回值是列表,而Python3中是类,返回值是对象,需要使用list来转换成列表。

因此,代码print (range(5))的结果可要分情况说明:

在Python2中结果:[0,1,2,3,4],

在Python3中结果:range(0, 5).

type(range(5))的结果也要分情况说明:

在Python2中结果:<type 'list'>,

在Python3中结果:<class 'range'>

2、Python3中类range是一个迭代器吗?

注意,类range是可迭代对象,而不是一个迭代器。此处要区分可迭代对象和迭代器。

可迭代对象:实现了__iter__(),那么就是可迭代对象。

迭代器:实现了__iter__()和__next__(),那么就是迭代器。

因此迭代器一定是可迭代对象,可迭代对象不一定是迭代器。

那么为什么Python3中类range是可迭代对象而不是迭代器?

主要因为迭代器是有状态的,只能遍历一次,而可迭代对象是没有状态的。

因此下面的代码:

>>> numbers = range(3)
>>> tuple(numbers)
(0, 1, 2)
>>> tuple(numbers)
(0, 1, 2)

对于numbers是可迭代对象,每次去初始化tuple时,都会获取新的迭代器,因此可以多次进行初始化别的容器。而这种需求在Python中经常被使用,因此将range不设计成迭代器是正确的。

而下面代码段:

>>> numbers = iter(range(3))
>>> tuple(numbers)
(0, 1, 2)
>>> tuple(numbers)
()

numbers是迭代器,第一次使用numbers初始化tuple时,已经消耗掉numbers里的值,因此再次使用是,将得到空元祖。

3、为什么Python3中将range定义成类,而舍弃Python2中的函数?

这是由于range类型是一个迭代类型,他在for循环的每一次执行过程中,将动态的得到下一个值。而旧版本的range()由于返回值是一个list,所以在运行for循环之前就需要得到整个list的数值。如果range()的范围很大的话,这将会加重内存的负担,而range类型的这种动态生成的特性使得它能够使用更少的内存,快速的运行。

4、range的常规用法。

(1)、range(stop):

相当于range(0, stop, 1),包括0,不包括stop。

(2)、range(start, stop[, step])

如果step省略,则默认为1,如果start省略,默认是0,如果step为0,则将产生ValueError异常。

如果step>0,则每个数的计算方式:r[i] = start + step*ii >= 0 and r[i] < stop注意如果r[0]>=stop,则range将为空。

如果step<0,则每个数的计算方式:r[i] = start + step*i, 且 i >= 0 and r[i] > stop,注意如果r[0]<=stop,则range将为空。

>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(range(0, 30, 5))
[0, 5, 10, 15, 20, 25]
>>> list(range(0, 10, 3))
[0, 3, 6, 9]
>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> list(range(0))
# 相当于range(0,0,1),需要满足条件r[i]<stop,而r[0]=0=stop,因此此时为空
[]
>>> list(range(1, 0))
# 相当于range(1,0,1),需要满足条件r[i]<stop,而r[0]=1>stop,因此为空
[]

注意以上为空的情况。

 

 

 

 

 

最后

以上就是生动薯片为你收集整理的Python range知识点总结的全部内容,希望文章能够帮你解决Python range知识点总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部