很抱歉,如果有人问这个问题但我在网上找不到任何可能的信息。我能解释这个问题的最简单方法就是使用代码段,这只是代表我的问题:
class A:
def a(self,):
print "Hello"
B = [A for i in xrange(10)]
map(self.a,B)
基本上我想迭代自定义类的数组并调用类函数。作为参考,如果类的功能是自包含的并且不返回任何内容,则会导致内部变量的更改。任何帮助都非常感谢,并且在一天结束时我想将它用于多处理.Pool。
谢谢, 阿里
答案 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')