有沒有在Python 3.x中使用標準庫在運行時編譯函數並通過函數對象使用它的方法?如何在運行時編譯函數?
我試過如下:
class A:
def meth1(self, par1):
print("in A.meth1: par1 =", par1)
a = A()
s = '''def meth1(self, par1):
print("in recompiled A.meth1: par1 = ", par1)'''
a.meth1.__func__.__code__ = compile(s, __file__, "exec")
a.meth1("via meth1")
但是,這給出了一個錯誤:
TypeError:
<module>(
) takes 0 positional arguments but 2 were given
在爲compile()
它writen與它編譯的代碼可以與eval()
或exec()
運行的文檔。有沒有辦法編譯一個函數,並通過沒有eval()和exec()的函數對象來調用它?
我想知道問題是什麼,需要自修改代碼作爲解決方案? –
@Roland我試圖使用一些僅在運行時才知道的信息(速度增強)。 –
也許你應該發表一個問題如何處理這個問題,但有更多的細節。可能有更好的方法。我假設你已經對代碼進行了剖析,以顯示程序大部分時間花在哪裏? –