本文是用AutoHotkey复刻Python的range函数
函数语法
range(start, stop, step)
参数说明:
参数 | 描述 |
start | 计数从 start 开始。默认是从 0 开始。例如:range(6)等价于range(0,6)。 |
stop | 计数到 stop 结束,但不包括 stop。例如:range(0,6) 是[0,1,2,3,4,5]没有6 |
step | 步长,默认为1。例如:range(0, 6) 等价于 range(0, 6, 1) |
输出说明:
range(6) ; 从 0 开始到 5 [0, 1, 2, 3, 4, 5]
range(0,6) ; 从 0 开始到 5 [0, 1, 2, 3, 4, 5]
range(1, 11) ;从 1 开始到 10 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
range(0,10,2) ; 从 0 开始到10的偶数 [0, 2, 4, 6, 8]
range(0, 10, 3) ; 步长为 3 [0, 3, 6, 9]
range(0, 30, 5) ; 步长为 5 [0, 5, 10, 15, 20, 25]
range(1, 0) ;[1]
range(25, 2, -2) ; [25 ,23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3]
range(0, -10, -1) ; 负数 [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
range(0) ; []
支持字母表输出,特别说明——字母型且步长为1情形,是包含stop的。
range("a","e") ; ["a","b","c","d","e"]
range("e") ; ["a","b","c","d","e"]
range("A", "Z") ;输出A-Z
range("a", "z")) ;输出a-z
range("A", "z") ;输出A-Z [ \ ] ^ _ ` a-z
/*
版权声明:本文为CSDN博主「liuyukuan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liuyukuan/article/details/128704747
功能:根据给定的范围和步长,返回一个整数列表(可用于for循环索引),如果给定的是字母则返回字母表。
参数说明:
start 计数从 start 开始。默认是从 0 开始。例如:range(6)等价于range(0,6)。
stop 计数到 stop 结束,但不包括 stop。例如:range(0,6) 是[0,1,2,3,4,5]没有6
step 步长,默认为1。例如:range(0, 6) 等价于 range(0, 6, 1)
*/
range(start:=0,end:="-0",step:=1) {
ret := []
if(start+0!=start)
{
stringFlag:=true
start:=Asc(start)
if (end =="-0" ) {
;大写字母
if(start>=65 and start<=90)
{
end := start
start := 65
}
;小写字母
if(start>=97 and start<=122)
{
end := start
start := 97
}
}else{
end:=Asc(end)
}
}
if (start == 0 && end == 0) {
return ret
}
if (step == 0) {
zeroStepFlag := true
}
if (end =="-0" ) {
end := start
start := 0
}
l_currentStep := start
; where step is 0, end at the array count
if (zeroStepFlag == true) {
loop, % end - 1 {
ret.push(l_currentStep)
l_currentStep +=step
}
return ret
}
if(end>start)
{
;递增
if(step<0)
step := -step
while (l_currentStep < end) {
if(stringFlag==true)
ret.push(chr(l_currentStep))
else
ret.push(l_currentStep)
l_currentStep += step
}
}
if(end<start){
;递减
if(step>0)
step := -step
while (l_currentStep > end) {
if(stringFlag==true)
ret.push(chr(l_currentStep))
else
ret.push(l_currentStep)
l_currentStep += step
}
}
if(stringFlag==true and abs(step)==1)
ret.push(chr(end))
return ret
}