2015-02-23 118 views
0

我正在写一些代码,并遇到以下循环。是否有写这个更pythonic的方式。For循环,迭代和调用

# obj_list = list of tuples [(someint, object)...] 
for a, obj in obj_list: 
    obj.callable() 
+1

什么是“a”,您打算如何使用它?你想存储什么'obj.callable()'返回? – 2015-02-23 10:31:03

回答

5

不是,它看起来很好。您可以使用_而不是a这表示该值未被使用,但这是非常次要的一点。

如果obj.callable()是返回一个值,你想存储的值,您可以使用列表理解:

results = [obj.callable() for _, obj in obj_list] 

results将包含由每个调用obj.callable()返回的值的列表。

+0

虽然列表理解在大多数情况下可能更可取,但您可以将其写为'results = map(methodcaller('callable'),map(itemgetter(1),obj_list))''。 – jfs 2015-02-23 11:39:37

0

不是。可能会有“更pythonic”的方式,但他们会牺牲可读性或做一些稍微不同的事情。

E.g.你能不能列出内涵:

returns = [ x.callable() for dummy, x in obj_list] 

但它看起来几乎一模一样并将结果(可能是不可取的)。

您可以使用map,但函数可以取出元组中所需的元素并在其上调用方法(尽管可能),可能看起来像是一种混淆。

+0

'map()'旨在将_same_函数应用于迭代中的每个项目,所以是的,这绝对是一个混淆。 – mhawke 2015-02-23 10:36:49

+0

只是为了完整而提及。这是可能的,并在我脑海中弹出。它也将是相同的功能。取元组,取第0个元素,调用'callable' =)。绝对不是为我走的路。对于我在与你同时写作的记录,我看到我们有同样的事情和整体判断。可能有更多的方法,但他们很可能不会以任何方式更好。 – luk32 2015-02-23 10:39:37