我正在编写一个会运行大量打印输出的程序。我真正想做的就是拥有打印输出的某些部分,在关闭后直接写入我的程序。
认为有一个'save()'函数就像'print()'的相似之处那样:
string = "#this my generated comment"
save(string,line)
行当然是您希望将字符串保存到程序中的行。现在请记住,我不仅仅想限制添加注释,我希望代码能够在下次调用新行时执行。
如果唯一的方法是保存文件,编辑然后重新加载,那很好。非常感谢基本的演练,
编辑:或者,我不反对将添加的行保存到另一个文件然后从程序中导入它的想法。
感谢,
答案 0 :(得分:3)
不要试图修改正在运行的模块/程序的源代码,而应考虑以下任何一项:
一些有用的链接:
答案 1 :(得分:1)
评论者声称,即时修改python程序是糟糕的形式/糟糕的做法,这可能是非常错误的。这是我在很多场合亲自使用的python的主要特征之一(作为研究PL理论的CS研究生)。然而,它们是正确的,使用像“x = x + 1”这样的字符串进行元编程是不好的形式。如果您想动态更改程序的操作,请使用type function。另请参阅以下有关python中元编程的教程:
http://python-3-patterns-idioms-test.readthedocs.org/en/latest/Metaprogramming.html
如果你真的需要在程序的运行中保存一个类的实例,那么你可以使用詹姆斯米尔斯在答案中指出的pickle library。它很简单:
#!/usr/bin/python
class HelloWorld:
def __init__(self, string):
self.string = string
def run(self):
print self.string
import pickle
pickle.dump(HelloWorld, open("prog.pkl", 'w'))
HW = pickle.load(open("prog.pkl", 'r'))
x = HW("Hello World")
x.run()
编辑:为了拥有“将在下次调用新行时执行的代码”,您不想使用inspect.getsource()
,而应该(遵循上面的代码):
import types
def newfncn(self):
print self.string + " 2.0!"
x.run = types.MethodType(newfncn, x)
x.run()
如果您确实必须使用字符串编辑代码,您可以执行以下操作:
import types
def newfncn(self):
exec("print self.string + \" 2.0!\"")
x.run = types.MethodType(newfncn, x)
x.run()
我强烈反对。