gpt4 book ai didi

python - 当我们索引一个对象(如列表或元组)时是否会发生函数调用?

转载 作者:行者123 更新时间:2023-11-28 20:38:27 25 4
gpt4 key购买 nike

这可能是个愚蠢的问题,但我想知道,当我们有一个容器对象(例如列表或元组)并对其进行索引时:

l = [2,4,5,6]
l[0]

在控制台中我们得到:

out[#]: 2

如果我们这样做,我们会得到很多相同的方式:

def ret(num):
return num
ret(1)

当我们索引列表或元组等时,是否有一个隐藏的函数调用?

最佳答案

你的假设是正确的。 Python 有一定的 "magic methods"使用相应的运算符从对象中调用它们。下标运算符([]) 就是其中之一。魔术方法称为__getitem__() . __getitem__() 的文档提供了更多信息:

Called to implement evaluation of self[key]. For sequence types, the accepted keys should be integers and slice objects. Note that the special interpretation of negative indexes (if the class wishes to emulate a sequence type) is up to the __getitem__() method. If key is of an inappropriate type, TypeError may be raised; if of a value outside the set of indexes for the sequence (after any special interpretation of negative values), IndexError should be raised. For mapping types, if key is missing (not in the container), KeyError should be raised.

您可以通过手动调用来观察 __getitem__() 是如何工作的:

>>> lst = [1, 2, 3, 4, 5]
>>> lst.__getitem__(0)
1
>>> lst.__getitem__(1)
2
>>> lst.__getitem__(2)
3
>>> # etc...

还有其他几种类似于__getitem__()的方法; __setitem__()__delitem__() . __setitem__() 将列表中的给定索引设置为给定值。调用该方法的语法糖是 sequence[index] = value。另一方面,__delitem__() 删除给定索引处的值。它的语法糖是 del sequence[index]。这两种方法都可以手动调用和观察:

>>> lst = [1, 2, 3, 4, 5]
>>> lst.__setitem__(0, 10)
>>> lst.__getitem__(0)
10
>>> lst.__delitem__(0)
>>> lst.__getitem__(0)
2
>>>

资源

关于python - 当我们索引一个对象(如列表或元组)时是否会发生函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41168534/

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