簡體   English   中英

Python在運行時從函數中提取body

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM