[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的地方就可以共用了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值