我想知道定义了pythons列表类型的__setitem__
和__getitem__
代码的位置。我知道列表是用C实现的,但我找不到实现列表索引和切片操作的代码。
答案 0 :(得分:4)
您会在listobject.c
file中找到所有内容。
它的方法在list_methods()
structure中列举。您可能还想研究PyList_Type
structure以获得有关各种钩子实现的进一步指示。
由于__getitem__
和__setitem__
是C sequence protocol的一部分,PyList_Type
结构指向定义这些挂钩的新结构list_as_sequence
,列在tp_as_sequence
的{{1}}广告位。
list_item
function实现PyList_Type
挂钩,__getitem__
由list_ass_item
表示。
另一方面,切片由映射协议处理,您最终会(list_as_mapping
)在list_subscript
和list_ass_subscript
处结束。
答案 1 :(得分:2)
查看文件listobject.c
...我添加了answer earlier today,指出了很多你想要的东西