我正在查看Python-2.7.6
的源代码来解决这个问题。
在Objects/fileobject.c
第1052行,有一个名为file_read
的函数,我猜这个函数对应read
中文件对象上的函数Python
。
在同一档案的第1067行,我看到以下行。请注意,在函数中进一步使用bytesrequested
来确定要分配用于存储文件的缓冲区的大小。
if (!PyArg_ParseTuple(args, "|l:read", &bytesrequested))
看起来请求的字节数以某种方式在args
内编码,其类型为PyObject*
。因此,继续搜索的自然地点是找出file_read
被调用的位置。
但是,我找不到实际调用file_read
的整个Python源代码树(递归grep)中的任何位置,因此我无法继续跟踪以了解实际计算bytesrequested
的方式。
file_read
在源树的不同部分以不同的名称调用吗?
答案 0 :(得分:4)
file_read
是python的file.read
方法。 C代码中的args
是您传递给file.read
的参数。 bytesrequested
是您传递给file.read
with open('file') as fin:
fin.read(5) # bytesrequested will be 5.