我有三个模块:
一个.py:
def abc():
print "Heeeeeeeeeeeiiiiiioooooooooo"
two.py:
import one
def defg():
one.abc()
three.py:
import os
from time import sleep
import two
two.defg()
sleep(20)
directory = os.listdir('.')
for filename in directory:
if filename[-3:] == 'pyc':
print '- ' + filename
os.remove(filename)
我有三个疑惑。
当我第一次运行 three.py 时,将创建 one.pyc 和 two.pyc。我可以看到它,因为我延迟了 20 秒。执行语句 os.remove(filename) 后,它们将被删除。直到这里都很好。
再次在不关闭 IDLE 和脚本的情况下,我运行了 three.py。这次没有创建 .pyc 文件。为什么会这样?
如果我关闭 IDLE 以及脚本,.pyc 将像以前一样创建。
为什么编译后的代码不能一次又一次地创建?
此外,如果我在
one.py中进行更改,如果我在不关闭 shell 的情况下运行,它将不会显示。我也需要一个解决方案。第三个疑问是,如果编译后的代码本身在第一次被删除,那么第二次运行如何在没有
.pyc的情况下给出相同的结果?
请您参考如下方法:
.pyc 不会再次创建,因为在代码中引用了您导入的模块。重新运行时,将使用此引用。
这就是为什么没有再次生成 .pyc,也是为什么您所做的额外更改没有运行的原因。
您可以删除所有引用并调用垃圾收集器,或者在模块上使用内置的 reload() 函数。例如:
reload(three)
