以下代码写在morph.py文件中:
with open("morph.py", "r+") as f:
old = f.read() # read everything in the file
f.seek(0,2) # rewind
f.write("1") # write the new line before
a="BAD"
a1="Worked"
print a
这个想法是morph.py文件将被重写,文本"工作"将被打印。
情况并非如此,我认为这与Python解释器如何加载文件有关。唯一有意义的是整个文件被加载,然后运行。
有人能说清楚吗?甚至可以在python中使用自变形代码吗?
答案 0 :(得分:3)
不是你想要这样做的方式。
在Python开始执行任何代码之前,它会将其编译为字节码表示,执行速度比逐行读取要快得多。这意味着在Python编译完文件后,文件的任何更改都不会反映在当前正在运行的代码中。
但是,您可以使用compile
,exec
或eval
手动加载字符串中的代码。您可以使用它来创建一个程序,该程序传递自己的源代码,更改并返回它,并执行修改后的源代码。
答案 1 :(得分:1)
第一次输出时运行文件:
BAD
当我第二次运行它时输出:
Worked
以后任何时候都会出错:
... name 'a11' is not defined
当你在文件上运行python时,它会加载文件,然后将其转换为字节码,然后执行字节码。当您更改文件时,该文件已经过转换,因此您看不到任何效果。