【发布时间】:2013-12-16 06:01:31
【问题描述】:
我正在查看Python-2.7.6 的源代码来解决这个问题。
在Objects/fileobject.c,第1052行,有一个函数叫file_read,我猜它对应于Python中文件对象上的函数read。
在同一文件的第 1067 行,我看到以下行。请注意,bytesrequested 在函数的下方用于决定分配用于存储文件的缓冲区的大小。
if (!PyArg_ParseTuple(args, "|l:read", &bytesrequested))
看起来请求的字节数以某种方式编码在args 中,其类型为PyObject*。因此,继续搜索的自然位置是找出调用file_read 的位置。
但是,我在整个 Python 源代码树(递归 grep)中找不到实际调用 file_read 的任何位置,因此我无法继续跟踪以了解实际计算 bytesrequested 的方式。
file_read 在源代码树的不同部分是否以不同的名称被调用?
【问题讨论】:
-
bytesrequests不是来自用户态 Python 吗?见:help(file.read) -
糟糕,我完全忘记检查了。我一直认为
file.read不带参数,因为我从未见过带参数调用它。 -
确实如此。可选参数。我怀疑你会发现更多的 C 源代码来检查是否也传递了
Null/None参数:)
标签: python c python-2.7 cpython