【发布时间】:2012-10-14 18:33:29
【问题描述】:
我想知道pythons列表类型的__setitem__和__getitem__code是在哪里定义的。我知道列表是用 C 实现的,但是我找不到实现列表的索引和切片操作的代码。
【问题讨论】:
我想知道pythons列表类型的__setitem__和__getitem__code是在哪里定义的。我知道列表是用 C 实现的,但是我找不到实现列表的索引和切片操作的代码。
【问题讨论】:
您可以在listobject.c file 中找到所有内容。
它的方法在list_methods() structure 中列举。您可能还想研究PyList_Type structure 以获得更多关于各种钩子实现的指针。
由于__getitem__ 和__setitem__ 都是C sequence protocol 的一部分,因此PyList_Type 结构指向定义这些挂钩的新结构list_as_sequence,列在PyList_Type 的tp_as_sequence 槽中。
list_item function 实现了__getitem__ 钩子,__setitem__ 由list_ass_item 表示。
另一方面,切片由映射协议处理,您最终会(通过list_as_mapping)list_subscript 和list_ass_subscript。
【讨论】:
查看文件listobject.c ...我添加了一个answer earlier today,它指向您正在寻找的很多东西
【讨论】: