2013-06-28 27 views
1

我想知道是否有与map类似的函数,但是为实例的方法工作。为了明确这一点,我知道map作品:在python中执行列表中的实例的特定方法

map(function_name , elements) 
# is the same thing as: 
[ function_name(element) for element in elements ] 

,现在我正在寻找某种map2,做:

map2(elements , method_name) 
# doing the same as: 
[ element.method_name() for element in elements ] 

,我试图通过自己做创建:

def map2(elements , method_name): 
    return [ element.method_name() for element in elements ] 

,但它不工作,蟒蛇说:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'method_name' is not defined 

即使我确定我正在使用的元素的类已定义了此方法。

有谁知道我该怎么做?

回答

4

operator.methodcaller()会给你一个你可以使用的功能。

map(operator.methodcaller('method_name'), sequence) 
+0

谢谢!只是增加一个可能会'输入运营商'之前 – rafa

1

您可以使用lambda表达式。例如:

a = ["Abc", "ddEEf", "gHI"] 
print map(lambda x:x.lower(), a) 

你会发现a的所有元素都变成了小写字母。

相关问题