天天看点

[201117] 为什么range范围是左闭右开区间?

[201117] 为什么range范围是左闭右开区间?

range(i,j) 相当于 [i,j)

这实际上遵守的是不对称边界的设计思想,是一种编程技巧,其根本原因是为了解决程序设计中难于察觉的

“栏杆错误”

,也叫“差一错误”(off-by-one error)(参见《C陷阱与缺陷》,p46)。

Python的数组下标是从0开始的,这一点和C语言是相同的。

不对称边界的编程技巧,有两种表示方式:

  1. 用第一个入界点和第一个出界点来表示一个数值范围。
  2. 用第一个被占用的元素和第一个被释放的元素分别来表示上界和下界。

这种不对称处理在数学上并不优美,但是对于程序设计却很友好。比如下面这段C代码:

int a[10],i;
for (i=0; i<10; i++) 
{
  a[i]=0;
}
           

如果非要坚持对称写法,则for语句要写成

for (i=0; i<=9; i++)

,这里,10和9就是不一样的数值,不便于可读性和维护(万一把10改成5,可能忘记把9改到4,那样就悲催了)。此外,C语言中,还可以定义一个宏,这样出现10的地方就可以共用了。