这三个函数的相同点是:
都可以生成指定数量步长相同的一组数据,而且生成的对象都可以被迭代!
如果只是需要一组指定范围内步长相同用来被迭代的数据,这三个函数用哪个都可以,重头戏在于这三个函数的不同点.
函数从属不同,从而在函数调用方法上也不同
range函数是Python的原生函数,调用的时候直接用函数名称调用就可以,如range(10)
;
arange和linspace是numpy库里的函数,调用之前要先导入numpy库import numpy as np
,如果是以这种方法导入的numpy库,在调用库里函数的时候,函数名前边需要加库的名字,如np.arange(10)
函数的参数设置和函数调用结果的不同
首先,来看一下range函数的参数要求和调用结果
Init signature: range(self, /, *args, **kwargs)
Docstring:
range(stop) -> range object
range(start, stop[, step]) -> range object
常用的参数设置就是我截取的这一块儿,可以看到range函数的参数有两种设置方式:
第一种:只设置终止值,这种情况下,生成的数值默认是从0开始到设置的终止值结束,步长默认是1;
第二种:指定起始值和终止值,生成的数值序列在设置的两者范围之内,步长是可选参数,如果不设置步长,步长默认是1
range函数的特点,生成的数值序列包含起始值不包含终止值,且不能通过参数改变这个特点
看一个栗子:
list(range(10))
返回结果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
这里用list函数进行数据类型的转换,就涉及到range函数的调用结果了
range函数生成的是一个range object,可以直接进行迭代但不能被人直接读取内部元素信息
所以,如要看下range函数调用结果,需要用其他数据类型转换函数进行转换.
range(10)
返回结果:range(0, 10)
这个结果的含义就是,生成了一个起始值是0,终止值是10,步长是1的range对象,然后这个range对象里边是不包含10的,数学表达一下的话应该是这样[0,10).
想要查看range对象中的元素,除了用list函数之外,像tuple函数和set函数也都是可以的.
和list函数返回的结果类似,就是数据外边的方括号变成了圆括号或者花括号
tuple(range(1,10,2)) #这里用了第二种参数设置方式,设置了起始值\终止值和步长
返回结果:(1, 3, 5, 7, 9) #用元组函数对range对象进行转化查看range对象中的元素
set(range(1,10,2)) #用集合函数转化也是可以的
返回结果:{1, 3, 5, 7, 9} #返回的数据类型就是集合,也可以查看range函数内部的元素
range函数的步长设置不能是浮点数,只能是整数
range(1,3,0.1)
返回结果:
TypeError Traceback (most recent call last)
in
----> 1 range(1,3,0.1)
TypeError: 'float' object cannot be interpreted as an integer
其次,来看一下arange函数
arange函数和range函数的相同之处
arange函数的参数设置和range函数的参数设置类似:
第一种方式是只设置终止值,起始值默认是0,步长默认是1;
第二种方式是设置起始值和终止值,步长作为可选参数,如果不设置,默认是1.
而且,arange函数生成的结果也是包含起始值不包含终止值的
arange函数和range函数的不同之处
arange函数生成的结果是array,不需要用其他序列函数进行转换就可以看到内部的元素
np.arange(10)
返回结果 : array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
而且,arange函数的步长参数可以是浮点数
np.arange(0,1,0.1)
返回结果:array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
由于生成的结果是array,具有向量的性质,可以直接进行运算
np.arange(0,1,0.1)+np.arange(10)
返回结果:array([0. , 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9])
range函数生成的结果是range对象,不可以进行这样的直接的运算操作:
range(10)+range(10)
返回结果
TypeError Traceback (most recent call last)
in
----> 1 range(10)+range(10)
TypeError: unsupported operand type(s) for +: 'range' and 'range'
如果想要是实现对应元素的数学运算,需要用到循环.
最后,来看一下linspace函数
linspace函数的参数比较多:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
和range函数与arange函数不同,linspace函数在进行调用的时候,至少要传入两个参数,即起始值和终止值,而且生成的结果默认既包含起始值也包含终止值,也可以通过参数进行设置是否要包含终止值,该函数根据起始值和终止值以及要生成数值的数量自动计算步长,不需要人为输入步长,可以通过retstep参数设置,是否显示步长,默认不显示
栗子:
np.linspace(1,10) #从1到10,默认生成50个数,包含10
返回结果:
1.91836735, 2.10204082, 2.28571429, 2.46938776, 2.65306122,
2.83673469, 3.02040816, 3.20408163, 3.3877551 , 3.57142857,
3.75510204, 3.93877551, 4.12244898, 4.30612245, 4.48979592,
4.67346939, 4.85714286, 5.04081633, 5.2244898 , 5.40816327,
5.59183673, 5.7755102 , 5.95918367, 6.14285714, 6.32653061,
6.51020408, 6.69387755, 6.87755102, 7.06122449, 7.24489796,
7.42857143, 7.6122449 , 7.79591837, 7.97959184, 8.16326531,
8.34693878, 8.53061224, 8.71428571, 8.89795918, 9.08163265,
9.26530612, 9.44897959, 9.63265306, 9.81632653, 10. ])
np.linspace(1,10,num = 10) #设置生成数值的个数
返回结果 : array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
np.linspace(1,10,num = 9 ,endpoint=False) #设置生成结果不包含终止值
返回结果 : array([1., 2., 3., 4., 5., 6., 7., 8., 9.])
np.linspace(1,10,num = 10 ,retstep = True) #retstep参数设置显示步长
返回结果 : (array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]), 1.0)
最后的1.0即为步长
linspac函数生成的也是array对象,和arange函数结果一样,也是具有向量属性的!