使用map调用类函数

时间:2011-07-09 00:08:37

标签: python

很抱歉,如果有人问这个问题但我在网上找不到任何可能的信息。我能解释这个问题的最简单方法就是使用代码段,这只是代表我的问题:

class A:
    def a(self,):
        print "Hello"
B = [A for i in xrange(10)]
map(self.a,B)

基本上我想迭代自定义类的数组并调用类函数。作为参考,如果类的功能是自包含的并且不返回任何内容,则会导致内部变量的更改。任何帮助都非常感谢,并且在一天结束时我想将它用于多处理.Pool。

谢谢, 阿里

3 个答案:

答案 0 :(得分:4)

这是你想要的吗?

>>> class A:
...  def a(self):
...   print "Hello"
... 
>>> B = [A() for i in xrange(10)]
>>> map(lambda a: a.a(), B)
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
[None, None, None, None, None, None, None, None, None, None]

答案 1 :(得分:3)

你几乎不想在Python中使用map;它几乎完全被列表推导所废弃。

class A(object):
    def a(self):
        print "Hello"

B = [A() for i in xrange(10)]
[obj.a() for obj in B]

答案 2 :(得分:0)

map()和列表推导将生成调用每个对象的方法的结果列表。如果这不是问题,那么它们就是要走的路,因为它们既短又甜。

这是一种不同的方法,设置时间较长,但避免了结果列表的创建,也可以处理在每次调用时传递一个或多个参数。它有点类似于multiprocessing.Pool对象的apply()方法。

class A(object):
    def a(self):
        print "Hello"
    def b(self, name):
        print "Hello", name

def apply_method(method, seq, *args):
    if args:
        generator = (getattr(obj, method)(*args) for obj in seq)
    else:
        generator = (getattr(obj, method)() for obj in seq)
    try:
        while True:
            generator.next()
    except StopIteration:
        pass

B = [A() for i in xrange(10)]

apply_method('a', B)
apply_method('b', B, 'Guido')