为什么 python imghdr 测试函数将文件作为参数?
why do python imghdr test functions take the file as an argument?
我正在查看 imghdr
模块的源代码,它是 python 标准库的一部分(我使用 2.7)。结构非常简单——一个 what
函数遍历名称如 test_filetype
的函数列表,如果传入的文件与任何测试匹配,它 returns 的字符串该文件类型。
所有 test_filetype
函数都有两个参数,h
和 f
。 h
是一个字符串,内容是f.read(32)
,f
是打开的文件对象。 test_filetype
函数中的 None 实际上使用 f
做任何事。
为什么 test_filetype
函数集都采用从未使用过的参数?
我的猜测是,这是为了允许将自定义函数添加到 imghdr.tests
。来自 documentation of imghdr
module -
You can extend the list of file types imghdr
can recognize by appending to this variable:
imghdr.test
A list of functions performing the individual tests. Each function takes two arguments: the byte-stream and an open file-like object. When what() is called with a byte-stream, the file-like object will be None.
The test function should return a string describing the image type if the test succeeded, or None if it failed.
从文档中可以看出,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 个字节test
函数,我相信额外的 f
参数可能适用于前 32
字节不足以确定图像格式的情况(尤其是对于自定义测试)。
我正在查看 imghdr
模块的源代码,它是 python 标准库的一部分(我使用 2.7)。结构非常简单——一个 what
函数遍历名称如 test_filetype
的函数列表,如果传入的文件与任何测试匹配,它 returns 的字符串该文件类型。
所有 test_filetype
函数都有两个参数,h
和 f
。 h
是一个字符串,内容是f.read(32)
,f
是打开的文件对象。 test_filetype
函数中的 None 实际上使用 f
做任何事。
为什么 test_filetype
函数集都采用从未使用过的参数?
我的猜测是,这是为了允许将自定义函数添加到 imghdr.tests
。来自 documentation of imghdr
module -
You can extend the list of file types
imghdr
can recognize by appending to this variable:
imghdr.test
A list of functions performing the individual tests. Each function takes two arguments: the byte-stream and an open file-like object. When what() is called with a byte-stream, the file-like object will be None.
The test function should return a string describing the image type if the test succeeded, or None if it failed.
从文档中可以看出,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 个字节test
函数,我相信额外的 f
参数可能适用于前 32
字节不足以确定图像格式的情况(尤其是对于自定义测试)。