免责声明:我不是问是否在上限stop的争论slice()以及range()为异或如何使用这些功能.
对函数range和slice函数的调用以及切片表示法[start:stop]都是指整数集.
range([start], stop[, step])
slice([start], stop[, step])
Run Code Online (Sandbox Code Playgroud)
在所有这些中,stop排除整数.
我想知道为什么语言是这样设计的.
是它使stop当等于在表示整数集合元素的数量start等于0或省略?
它有:
for i in range(start, stop):
Run Code Online (Sandbox Code Playgroud)
看起来像下面的C代码?
for (i = start ; i < stop; i++) {
Run Code Online (Sandbox Code Playgroud) >>> class Thing(object):
... def __index__(self):
... return 1
...
>>> thing = Thing()
>>> list_ = ['abc', 'def', 'ghi']
>>> list_[thing]
'def'
>>> dict_ = {1: 'potato'}
>>> dict_[thing]
# KeyError
Run Code Online (Sandbox Code Playgroud)
thing知道如何在列表访问时将自己表示为1,而不是由dict表示?难道两种魔术方法都没有通过__getitem__?列表中显示的用法可以通过,__int__所以无论如何,存在的理由是__index__什么?
正如目前在这个问题中讨论的那样,我正在编写内置函数range和xrange函数的包容性版本.如果将它们放在名为的模块中inclusive,我会看到两种可能的方法来命名函数本身:
命名函数inclusive_range,inclusive_xrange以便客户端代码可以使用它们,如下所示:
from inclusive import *
...
inclusive_range(...)
Run Code Online (Sandbox Code Playgroud)命名函数range和xrange:
import inclusive
...
inclusive.range(...)
Run Code Online (Sandbox Code Playgroud)对我来说,客户端代码的第二个示例看起来更好,但是我应该避免以这种方式重用内置名称吗?