谁能解释为什么导入 cv 和 numpy 会改变 python 的 struct.unpack 的行为?这是我观察到的:
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from struct import pack, unpack
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
这是对的
>>> import cv
libdc1394 error: Failed to initialize libdc1394
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
还是可以的,导入cv后
>>> import numpy
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
导入 cv 然后 numpy 后确定
现在我重新启动python:
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from struct import pack, unpack
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
>>> import numpy
>>> unpack("f",pack("I",31))[0]
4.344025239406933e-44
到目前为止一切顺利,但现在我在导入 numpy 之后导入 cv:
>>> import cv
libdc1394 error: Failed to initialize libdc1394
>>> unpack("f",pack("I",31))[0]
0.0
我已经重复了很多次,包括在多台服务器上,它总是以同样的方式进行。我也用 struct.unpack 和 struct.pack 试过,也没什么区别。
我无法理解导入 numpy 和 cv 如何对 struct.unpack 的输出产生任何影响(顺便说一句,pack 保持不变)。
我相信“libdc1394”的事情是一个红鲱鱼:ctypes错误:libdc1394错误:无法初始化libdc1394
有任何想法吗?
tl; dr:导入 numpy 然后 opencv 会改变 struct.unpack 的行为。
更新:保罗在下面的回答表明这是可重现的。Seborg 的评论表明这与 python 处理次常态的方式有关,这听起来很合理。我查看了上下文,但这似乎不是问题,因为导入后的上下文与它们之前的上下文相同。