2017-03-08 46 views
0

如何获取注入方法的依赖项列表,但看不到?在Python中打印捕获的对象的列表

指着一些阅读也将是巨大的:)

例子:

external_object = "abc" 
def func(data, params) 
    print(external_object) 
    ... 

def get_list_of_dependencies(func): 
    # TODO 

依赖的get名单将打印出的外部对象。我尝试这样做的原因是因为我试图记忆函数func,但由于注入到函数中的这些外部依赖项,我创建的哈希函数不能完全工作。

谢谢!

+0

这可能是我自己缺乏理解,但是这是什么意思来记忆一个函数?什么是外部注入依赖?有外部图书馆吗? – mitoRibo

+0

此外,你有一个*功能*不是一种方法。 –

+0

感谢您的澄清。仍然在我脑海中的上下文切换阶段:P – Akshay

回答

2

我相信你想要的东西可以通过检查连接到你的function对象的__code__对象来实现。例如:

在一个名为funcs.py:现在

external_object = "external object" 
def f(): 
    print(external_object) 
    nested = "nested" 
    def g(): 
     print(nested) 
    return g 

,在解释对话:

键入 “help”, “版权”, “信用” 或 “许可” 的详细信息。

>>> import funcs 
>>> funcs.f.__code__.co_names 
('print', 'external_object') 
>>> 

或者,如果你想要的局部变量:

>>> funcs.f.__code__.co_cellvars 
('nested',) 

您也可以访问其他的东西,比如自由变量。请注意,nested是在封闭的g自由变量:

>>> g = funcs.f() 
external object 
>>> g.__code__.co_names 
('print',) 
>>> g.__code__.co_freevars 
('nested',) 
>>> 

了解更多有关可用属性here。我会注意到,它可能是不依赖于这个伟大的想法,因为在文档的警告,

它们的定义可能与解释, 的未来版本中改变,但他们在这里提到的完整性。

+0

哦,哇!非常感谢!这就是我一直在寻找的。根据我的理解,__code__显示编译对象的代码。有没有办法在一个方法中运行这个? – Akshay

+0

@Akshay你是什么意思“在一个方法中运行”? –

+0

示例: def magic_function(func): print func .__ code __。co_names 或者那是不好的练习 – Akshay

0

的功能(在__code__属性中找到)的代码对象包含多个属性,让在代码对象本身,例如所使用的值和名称co_consts,co_names