簡體   English   中英

如何從Python Shell調用內部函數?

[英]How can I call a inner function from the Python shell?

我有一些代碼(無法輕易修改),格式如下:

def foo(x):
   do_other_stuff_that_I_do_not_want_to_do()
   def bar():
      "do something"
      str(x)
   bar()

我想直接從Python Shell調用bar() 我不介意使用co_globals或其他內部位。 我覺得這可能是不可能的。 是嗎?

就像您所說的那樣,用代碼獲取內部函數對象不可能的-僅在外部函數運行時 (即,在調用它時)才創建該對象(由def語句創建)。

順便說一句,請注意,像foo這樣的外部函數通常都經過編碼以返回內部函數作為它們的結果(例如,通過將bar()更改為return bar )作為最后一行,確切地用作“函數工廠”(通常是“關閉工廠”),而不是保留內部功能的存在作為一種私有的,秘密的實現細節; 但您的編碼選擇了后一種路線。

編輯 ...:

但是可以獲取內部函數的代碼對象:

>>> def outer():
...   def inner(): return 'boo'
...   print inner()
... 
>>> eval(outer.func_code.co_consts[1])
'boo'
>>> 

但是,通常來說,將代碼對象變成可調用函數需要大量工作(在這種特殊情況下,用eval就足夠了,因為內部函數沒有參數也沒有任何非局部變量,但是當然這與一般情況沒有任何關系 。 ..您必須在其中提供非本地人綁定之類的細節!-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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