我正在查看imghdr
模块的源代码,它是python标准库的一部分(我使用的是2.7)。结构非常简单 - 一个what
函数,它迭代一个名为test_filetype
的函数列表,如果传入的文件与任何测试匹配,则返回该文件类型的字符串。 / p>
所有test_filetype
个函数都有两个参数,h
和f
。 h
是一个内容为f.read(32)
的字符串,f
是打开的文件对象。 test_filetype
函数实际上没有任何函数使用f
。
为什么test_filetype
个函数集都采用从未使用过的参数?
答案 0 :(得分:1)
我的猜测是允许将自定义函数添加到imghdr.tests
。来自documentation of imghdr
module -
您可以通过附加到此变量来扩展
imghdr
可识别的文件类型列表:
imghdr.test
执行各项测试的功能列表。每个函数都有两个参数:字节流和类似开放文件的对象。当使用字节流调用what()时,类文件对象将为None。
如果测试成功,测试函数应返回描述图像类型的字符串,如果失败则返回None。
从文档中可以看出,imghdr
模块允许扩展到tests
列表。我认为添加参数f
可以用于添加到此列表中的这些自定义函数。
if h is None:
if isinstance(file, basestring):
f = open(file, 'rb')
h = f.read(32)
else:
location = file.tell()
h = file.read(32)
file.seek(location)
可以看出,当我们向what()
函数发送文件名时,它只读取文件中的前32个字节,并仅在h
参数中发送这32个字节。 1}}函数,我相信额外的test
参数可能适用于第一个f
字节不足以确定图像格式的情况(特别是对于自定义测试)。