python中range()参数的顺序
我想知道Python 2.7中的range()函数如何具有如下语法:python中range()参数的顺序,python,range,Python,Range,我想知道Python 2.7中的range()函数如何具有如下语法: range(start, stop[, step]) 因为在Python中创建函数要求可选参数位于参数项的末尾,如中所示: function(a, b, c=1) (由于某些原因,我找不到range()声明为so的文件…) 但是可以只输入一个(停止)整数,如范围(10) 那么range是否使用了下面这样的构造?还是有一种更优雅的方式 def TestRange(start, stop = None, stepSize =
range(start, stop[, step])
因为在Python中创建函数要求可选参数位于参数项的末尾,如中所示:
function(a, b, c=1)
(由于某些原因,我找不到range()声明为so的文件…)
但是可以只输入一个(停止)整数,如范围(10)
那么range是否使用了下面这样的构造?还是有一种更优雅的方式
def TestRange(start, stop = None, stepSize = 1):
if stop == None:
d = 0
TrackTest = []
while d < start:
TrackTest += [d]
d += stepSize
return TrackTest
else:
d = start
TrackTest = []
while d < stop:
TrackTest += [d]
d += stepSize
return TrackTest
查看
range
的源代码(这是range\u新的功能):
如果Python3range
中的Python2或Python3(PyTuple\u Size(args))不返回列表,它将返回一个range
对象。生成器适用于Python3版本(或Python2xrange
)我试过了,最后得出结论,在Python中创建函数要求可选参数位于参数项的末尾,如function(a,b,c=1)
。不允许使用function(a=1,b,c=1)
。
print TestRange(6)
print TestRange(2, 6)
print TestRange(2, 6, 2)
if (PyTuple_Size(args) <= 1) {
if (!PyArg_UnpackTuple(args, "range", 1, 1, &stop))
return NULL;
stop = PyNumber_Index(stop);
if (!stop)
return NULL;
start = PyLong_FromLong(0);
if (!start) {
Py_DECREF(stop);
return NULL;
}
step = PyLong_FromLong(1);
if (!step) {
Py_DECREF(stop);
Py_DECREF(start);
return NULL;
}
}
else {
if (!PyArg_UnpackTuple(args, "range", 2, 3,
&start, &stop, &step))
return NULL;
/* Convert borrowed refs to owned refs */
start = PyNumber_Index(start);
if (!start)
return NULL;
stop = PyNumber_Index(stop);
if (!stop) {
Py_DECREF(start);
return NULL;
}
step = validate_step(step); /* Caution, this can clear exceptions */
if (!step) {
Py_DECREF(start);
Py_DECREF(stop);
return NULL;
}
}