【问题发现】
相信很多使用Python的小伙伴,都用到过range()函数,进行循环或遍历。
for i in range(len(a)):
print(a[i])
但当我们用得正嗨时,可能突然看到其他作者的代码中用的并不是range()函数,而是arange()函数,就有些困惑,是不是代码写错了?自己写代码时,该用哪个更好,逼格更高呢?
其实两者功能十分相似,仅存在一点点区别。为了让大家更清楚地记住和区分它们,接下来将主要介绍它们的各自特点。
【问题解析】
1.range()函数和arange()函数最大的区别
前者是Python内置的函数,直接调用即可;后者是numpy中的函数,调用时一般采用np.arange()。
import numpy as np
for i in np.arange(10):
print(i)
2.range()函数仅支持整数步长
我们知道,range()函数具有3个参数,分别是起点、终点和步长。需要注意的是这3个参数均为整数型,不能设置为浮点型,这也导致了range()函数的返回值同样都是整数型的。
# range()函数的三种使用方法
# 1.仅设置终点参数,默认起点为0,步长为1,返回值范围为[起点,终点)
>>>range(10)
0,1,2,3,4,5,6,7,8,9
# 2.设置起点和终点,步长默认为1,返回值范围为[起点,终点)
>>>range(2,10)
2,3,4,5,6,7,8,9
# 3.设置起点、终点和步长
>>>range(1,10,2)
1,3,5,7,9
# 当设置起点、终点或步长为小数时,将会报错
>>>range(1,10,2.1)
TypeError: 'float' object cannot be interpreted as an integer
3.np.arange()函数支持小数步长
当然,在项目开过程中难免会遇到需要小数迭代序列,这时就需要np.arange()函数发挥它的作用了!首先,需要明确range()函数对整数参数的使用,np.arange()函数都能替代。
# np.arange()函数的整数型参数设置
# 1.仅设置终点参数,默认起点为0,步长为1,返回值范围为[起点,终点)
>>>np.arange(10)
0,1,2,3,4,5,6,7,8,9
# 2.设置起点和终点,步长默认为1,返回值范围为[起点,终点)
>>>np.arange(2,10)
2,3,4,5,6,7,8,9
# 3.设置起点、终点和步长
>>>np.arange(1,10,2)
1,3,5,7,9
其次,np.arange()函数的3个参数均可设置为小数,可以最大自由化我们的需求。
# np.arange()函数的整数型参数设置
# 1.终点为小数,默认起点为0.0,步长为1.0
>>>np.arange(10.2)
0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0
# 2.设置起点和终点均为小数,步长默认为1.0,返回值范围为[起点,终点)
>>>np.arange(2.1, 5.1)
2.1,3.1,4.1
# 3.设置起点、终点和步长均为小数
>>>np.arange(1.1, 5.2, 1.1)
1.1,2.2,3.3,4.4
4. 两者数据类型不同
range()函数返回的类型为range对象,np.arange()函数返回的类型为array类型对象。作者认为该区别影响不大,不做过多赘述。