为什么Range函数将给定的一个参数视为停止值而不是开始值



为什么当只给定一个参数时,range()函数会认为该参数是stop值,而当stop值是第二个参数时,当两个参数同时调用range()

根据Python,函数的默认参数应该在其他参数的后面定义。

此函数不遵循正常的Python约定。它实际上查看参数的数量,然后选择如何解释它们。一个论点?这是停止值。二这些是开始和停止。

原因当然是传统和向后兼容性。但可读性:range(n)是迄今为止最常见的情况,您不希望它是例如range(stop=n)。OTOH如果您想要范围的两个边界,那么唯一自然的方法是将它们写为range(m, n),第一个位置必须由左边界占据。

这就是为什么Python的作者必须实现这种";魔术";,这对于Python来说通常是不寻常的,这就是为什么它不能用一个签名很好地表示。

人们可以考虑多种方法来为靶场结构制作一个完全干净的设计,而不会出现这种差异,但向后兼容性要求range在这里停留很长一段时间。

范围有两个"构造函数";比方说,来源:

class range(object):
"""
range(stop) -> range object
range(start, stop[, step]) -> range object

Return an object that produces a sequence of integers from start (inclusive)
to stop (exclusive) by step.  range(i, j) produces i, i+1, i+2, ..., j-1.
start defaults to 0, and stop is omitted!  range(4) produces 0, 1, 2, 3.
These are exactly the valid indices for a list of 4 elements.
When step is given, it specifies the increment (or decrement).
"""

最新更新