【发布时间】:2011-05-29 03:03:04
【问题描述】:
>>> range(1,11)
给你
[1,2,3,4,5,6,7,8,9,10]
为什么不是1-11?
他们只是随意决定这样做还是有一些我没有看到的价值?
【问题讨论】:
-
阅读 Dijkstra, ewd831
-
基本上,您是在为另一组单独选择一组错误。一组更有可能导致您的循环提前终止,另一组可能导致异常(或其他语言中的缓冲区溢出)。一旦你编写了一堆代码,你就会发现
range()行为的选择更有意义 -
链接到 Dijkstra,ewd831:cs.utexas.edu/users/EWD/ewd08xx/EWD831.PDF
-
@unutbu Djikstra 的那篇文章在这个话题中经常被引用,但在这里没有提供任何有价值的东西,人们只是把它用作对权威的呼吁。他为 OP 的问题给出的唯一相关的伪原因是他碰巧觉得在 特殊情况 中包含上限变得“不自然”和“丑陋”,其中序列为空 - 这完全是主观立场,容易反对,所以它不会带来太多好处。如果不了解 Mesa 的特定约束或评估方法,那么使用 Mesa 进行的“实验”也没有多大价值。
-
@andreasdr 但是即使表面上的论点是有效的,Python 的方法不是引入了新的可读性问题吗?在通用英语中,术语“范围”意味着某事物的范围从某事物到某事物——就像一个区间。 len(list(range(1,2))) 返回 1 和 len(list(range(2))) 返回 2 是你真正必须学会消化的东西。