【问题标题】: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 上询问

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 2013-03-05
      • 2011-12-24
      • 2018-11-10
      • 2017-10-31
      相关资源
      最近更新 更多