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