0

问题:如何为这个循环定义一个紧凑的结构:

for V in L:
   V.f()

在哪里:

  • L: 是给定类型的对象列表A
  • f(): 一种方法A

例如:

class A:
    def f(self):
        print "foobar... "

# Construct the list
a1 = A()
a2 = A()
a3 = A()
L = [a1, a2, a3]

for V in L:
    V.f()

我找到了一种使用 map 调用和 lambda 函数的方法:

 map(lambda x: x.f(), L)

但是,此调用返回一个列表,我不想构造它。

有没有更优雅的方式来做到这一点?

4

2 回答 2

1

正确的方法是使用您提到的循环。任何其他解决方案在语义上都是不正确的。

(您所说的是“对于 L 中的每个项目,执行 f。”也就是说,您是命令式的。for 循环正是如此。)

于 2013-04-01T06:50:31.210 回答
0

如果您不希望将列表作为返回值,那么您的 for 循环是最好的方法。

for V in L:
    V.f()

或者,您可以使用 python 的最佳功能之一,列表推导,而不是将其分配给任何变量。列表推导通常更快。

[ V.f() for V in L]
于 2013-04-01T06:43:40.290 回答