Python 中的自变形代码可能吗?

Is Self Morphing code in Python possible?

下面的代码写在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文件,打印"Worked"文本。

不是这样的,我认为这与 Python 解释器加载文件的方式有关。唯一有意义的是加载整个文件,然后 运行.

有人可以解释一下吗?甚至可以在 python 中使用自变形代码吗?

部分相关问题: Self decompressing and executing code in python

不是您想要的方式。

在Python开始执行任何一段代码之前,它会将其编译成字节码表示形式,这比逐行读取要快得多。这意味着在 Python 编译文件后,对文件的任何更改都不会反映在 current-运行 代码中。

但是,您可以使用 compileexeceval 从字符串中手动加载代码。您可以使用它来创建一个程序,该程序传递自己的源代码,对其进行更改和 returns,然后执行修改后的源代码。

当我运行文件第一次输出时:

BAD

当我 运行 它第二次输出时:

Worked

之后的任何时候都会报错:

... name 'a11' is not defined

当你运行 python一个文件时,它会加载文件,然后将它转换成字节码,然后执行字节码。当您更改文件时,该文件已经进行了转换,因此您看不到任何效果。