[英]Python extracting body from function at runtime
給定Python中的函數定義如下:
a = 3
b = 4
c = 5
def add():
d = a+b+c
是否有可能獲得一個代碼對象或類似物給我:
a = 3
b = 4
c = 5
d = a+b+c
函數對象有一個與之關聯的代碼對象; 你可以exec
該代碼對象:
>>> a = 3
>>> b = 4
>>> c = 5
>>> def add():
... d = a+b+c
...
>>> exec add.func_code
但是,這不會在本地名稱空間中設置d
,因為它被編譯為僅使用STORE_FAST
操作碼創建本地名稱。 您必須轉換此字節碼才能使用STORE_DEREF
操作碼,這需要您學習AST轉換。
如果您確實想要沿着這條路走下去,那么請閱讀Python中的探索動態范圍 ,它將教您Python范圍和字節代碼的細節。
您可以使用global
命令,這是我認為最簡單的方法
>>> a = 3
>>> b = 4
>>> c = 5
>>> def add():
global d
... d = a+b+c
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.