【问题标题】:cpython: when PyDict_GetItem is called and when dict_subscript?cpython:何时调用 PyDict_GetItem 以及何时调用 dict_subscript?
【发布时间】:2011-01-29 01:55:41
【问题描述】:
我正在阅读 python 3k 的 cpython 代码,我注意到,只有在调用 dict_subscript 时才会调用 __missing__,但在使用 PyDict_GetItem 时不会调用。这两种方法之间有什么区别以及何时调用它们?如果我传递一个 PyObject 是 dict 的子类并且具有 __missing__ 方法,我该如何强制使用它,因为 PyDict_GetItem 不会这样做。
【问题讨论】:
标签:
python
dictionary
cpython
【解决方案1】:
观察、猜测等:
在 Python 2.x 中也是如此。
dict_subscript 实现了与 high_level dict.__getitem__ 方法等效的方法,因此每当adict[somekey] 出现在 Python 代码中赋值的 LHS 之外时都会被调用。
PyDict_GetItem 是 C API 的一部分。可能是疏忽了,没有更新。
阅读了 PyDict_GetItem 开头的可怕 cmets,我会改用 PyDict_GetItemWithError ;-)
也许您可以执行一次与 my_getitem = getattr(my_dict, '__getitem__') 等效的 C 级操作,然后调用它。
也许您可以提出错误票或在 comp.lang.python 上询问