2015-02-23 77 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