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