C Python实现中函数_PyIO_str_readline的实现在哪里?

时间:2019-05-21 04:05:21

标签: cpython

在问题上,How is file implemented?我了解了open()方法的实现方式,但是我找不到在其实现中使用的_PyIO_str_readline函数的定义位置。

  1. https://docs.python.org/3/c-api/object.html
  2. https://github.com/python/cpython/search?q=_PyIO_str_readline

1 个答案:

答案 0 :(得分:1)

您的问题是您认为_PyIO_str_readline是一个函数,但实际上它只是一个声明为here的全局变量(类型为PyObject *):

extern PyObject *_PyIO_str_readline;

并定义了here

PyObject *_PyIO_str_readline = NULL;

NULL,但顾名思义,任何字符串对象都可以(例如Python3中的unicode或Python2中的字节)。

_PyIO_str_readline是一种缓存(在CPython中通常称为“中间字符串”-参见PyUnicode_InternFromString),因此每次使用{readline“作为方法调用PyObject_CallMethodObjArgs时,名称,则不能重新构造相应的对象。

_PyIO_str_readline使用宏ADD_INTERNEDPyInit__io中初始化为其实际值:

   
/* Interned strings */
#define ADD_INTERNED(name) \
  if (!_PyIO_str_ ## name && \
      !(_PyIO_str_ ## name = PyUnicode_InternFromString(# name))) \
      goto fail;

...
ADD_INTERNED(readline)
..

_PyIO_str_readline是值为readline的Unicode对象。实际使用的readline方法是在运行时解决的,取决于实际的self