1

我想知道pythons列表类型的__setitem____getitem__代码是在哪里定义的。我知道列表是用 C 实现的,但是我找不到实现列表的索引和切片操作的代码。

4

2 回答 2

4

您会在listobject.c文件中找到所有内容。

它的方法在list_methods()结构中被列举。您可能还想研究PyList_Type结构,以获取指向各种钩子实现的更多指针。

由于__getitem____setitem__都是C 序列协议的一部分,因此该PyList_Type结构指向一个定义这些钩子的新结构,list_as_sequence列在.tp_as_sequencePyList_Type

list_item函数实现了__getitem__钩子,__setitem__并由 表示list_ass_item

另一方面,切片由映射协议处理,您最终会(通过list_as_mapping)在list_subscriptlist_ass_subscript

于 2012-10-24T16:57:19.140 回答
2

看看文件listobject.c......我今天早些时候添加了一个答案,它指向了你正在寻找的很多东西

于 2012-10-24T16:56:33.557 回答