为什么.pyc文件的存在会改变我的代码的结果?

时间:2016-12-20 13:51:50

标签: python pyc

我有一个算法的测试用例,它在第一次执行后给出了不同的结果。

测试从两个文件中导入算法和测试数据。

第一次执行返回正确的结果,并为测试数据文件创建.pyc文件。 第二次和所有后续执行返回不正确的结果。 当我删除测试数据的.pyc文件时,下一次执行会再次返回正确的结果(并再次创建一个新的.pyc文件)。

当我将测试数据移动到与测试用例本身相同的文件中时(即避免创建.pyc文件),测试总是通过。

我无法将此修复程序应用于我的完整程序。

这是一个已知问题,是否有修复?

2 个答案:

答案 0 :(得分:1)

.pyc文件包含字节代码,这是Python解释器编译源的代码。然后,此代码由Python的虚拟机执行。

Python的文档解释了这样的定义:

  

Python是一种解释型语言,而不是已编译的语言,   虽然由于存在,但区别可能是模糊的   字节码编译器。这意味着可以直接运行源文件   没有显式创建一个可执行的,然后运行

仅当某个其他脚本导入该python文件时,才会创建(并可能覆盖).pyc文件。如果调用导入,Python将检查.pyc文件的内部时间戳是否与相应的.py文件匹配。如果是,则加载.pyc;如果它不存在或者.pyc尚不存在,Python会将.py文件编译成.pyc并加载它。

答案 1 :(得分:0)

有一件事我发现更改是文件(.pyc vs .py)的值,这让我开始编写调用堆栈跟踪的实用程序。