相关疑难解决方法(0)

为什么切片和范围上限是独占的?

免责声明:我不是问是否在上限stop的争论slice()以及range()为异或如何使用这些功能.

对函数rangeslice函数的调用以及切片表示法[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)

python language-design slice

33
推荐指数
5
解决办法
1万
查看次数

Python __index__特殊方法

>>> 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__什么?

python magic-methods

14
推荐指数
2
解决办法
1万
查看次数

可以重用Python内置函数的名称吗?

正如目前在这个问题中讨论的那样,我正在编写内置函数rangexrange函数的包容性版本.如果将它们放在名为的模块中inclusive,我会看到两种可能的方法来命名函数本身:

  1. 命名函数inclusive_range,inclusive_xrange以便客户端代码可以使用它们,如下所示:

    from inclusive import *
    ...
    inclusive_range(...)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 命名函数rangexrange:

    import inclusive
    ...
    inclusive.range(...)
    
    Run Code Online (Sandbox Code Playgroud)

对我来说,客户端代码的第二个示例看起来更好,但是我应该避免以这种方式重用内置名称吗?

python naming-conventions

5
推荐指数
1
解决办法
173
查看次数