一个例子是python的file.__exit__
(即除了关闭之外它还做了什么)。这记录在哪里?我尝试使用谷歌搜索,但没有找到好的结果。
答案 0 :(得分:3)
Python的内置函数和类型是用C语言编写的(在参考实现中,CPython)。如果需要,您可以阅读其源代码。对于你要问的__exit__
方法,在Python 3中,我认为你正在寻找文件Modules/_io/iobase.c
:
static PyObject *
iobase_exit(PyObject *self, PyObject *args)
{
return PyObject_CallMethodObjArgs(self, _PyIO_str_close, NULL);
}
看起来除了致电close
之外什么都不做。
Python 2的等效代码位于不同的文件中,因为它仍然使用自己的IO类(而不是IO模块,它也可以作为Python 3的后端)。查看Objects/fileobject.c
。
static PyObject *
file_exit(PyObject *f, PyObject *args)
{
PyObject *ret = PyObject_CallMethod(f, "close", NULL);
if (!ret)
/* If error occurred, pass through */
return NULL;
Py_DECREF(ret);
/* We cannot return the result of close since a true
* value will be interpreted as "yes, swallow the
* exception if one was raised inside the with block". */
Py_RETURN_NONE;
}
我不确定为什么这段代码需要对{3}代码不需要的None
进行测试,但你仍然可以看到它除了调用close
之外什么都不做(并忽略其返回值)。