繁体   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