gpt4 book ai didi

python - Python 索引背后的逻辑

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:44 26 4
gpt4 key购买 nike

我很好奇 Python 为什么 x[0] 检索 x 的第一个元素,而 x[-1] 检索第一个元素以相反顺序阅读时的元素。语法对我来说似乎不一致,因为在一种情况下我们计算与第一个元素的距离,而在向后阅读时我们不计算与最后一个元素的距离。 x[-0] 这样的东西不是更有意义吗?我的一个想法是,Python 中的区间通常被认为包含下限但不包含上限,因此索引可能被解释为与下限或上限元素的距离。关于为什么选择这种表示法的任何想法? (我也很好奇为什么零索引是首选。)

最佳答案

Dijkstra here 简要描述了一般从零开始索引的情况.另一方面,你必须考虑 Python 数组索引是如何计算的。由于首先计算数组索引:

x = arr[index]

会先解析计算index,而-0显然是0,不可能有arr [-0] 表示最后一个元素。

y = -0 (??)
x = arr[y]

几乎没有意义。

编辑:

让我们看一下下面的函数:

def test():
y = x[-1]

假设 x 已在上面声明为全局范围。现在让我们看一下字节码:

          0 LOAD_GLOBAL              0 (x)
3 LOAD_CONST 1 (-1)
6 BINARY_SUBSCR
7 STORE_FAST 0 (y)
10 LOAD_CONST 0 (None)
13 RETURN_VALUE

基本上全局常量x(更准确地说是它的地址)被压入堆栈。然后计算数组索引并将其压入堆栈。然后是实现 TOS = TOS1[TOS] 的指令 BINARY_SUBSCR(其中 TOS 表示 栈顶)。然后将栈顶弹出到变量 y 中。

因为 BINARY_SUBSCR 处理负数组索引,所以 -0 在被推到堆栈顶部之前将被计算为 0 ,需要对解释器进行重大更改(和不必要的更改)才能使 arr[-0] 指示数组的最后一个元素。

关于python - Python 索引背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31822523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com