当前位置: 代码迷 >> python >> Python中的自变形代码可能吗?
  详细解决方案

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

热度:14   发布时间:2023-06-16 14:05:25.0

以下代码写在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中包含自变形代码?

部分相关的问题:

并非以您尝试的方式进行。

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

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

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

BAD

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

Worked

随后的任何时间都会产生错误:

... name 'a11' is not defined

在文件上运行python时,它将加载文件,然后将其转换为字节码,然后执行字节码。 更改文件时,该文件已经过转换,因此看不到任何效果。