确定在lambda函数中调用的方法

时间:2014-04-30 13:53:56

标签: python python-2.7 lambda

我有一个lambda函数,它被传递给一个对象并存储为一个变量:

f = lambda x: x.method_foo()

我想确定变量x上调用的方法名称为字符串。所以我想要

method_foo

保存为字符串。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用func_code访问lambda的代码对象,并使用co_names访问代码的本地名称。

>>> f = lambda x: x.method_foo
>>> f.func_code.co_names
('method_foo',)
>>> f.func_code.co_names[0]
'method_foo'

答案 1 :(得分:0)

这有点疯狂",但您可以使用Mock传递给f并获取调用函数后添加到模拟中的方法:

>>> from mock import Mock
>>> f = lambda x: x.method_foo
>>> m = Mock()
>>> old_methods = dir(m)
>>> f(m)
<Mock name='mock.method_foo' id='4517582608'>
>>> new_methods = dir(m)
>>> next(method for method in new_methods if method not in old_methods)
'method_foo'