2012-03-05 131 views
1

有沒有辦法使這pythonic。結合變量和每個循環python

the_list = [1,2,3,4,5] 
for x in the_list 
    y= get_handler(x) 
    #do something with x and y 

基本上是有一個更簡單的方法把get_handler放在減速?

非常可讀的格式,如:

for x, get_handler(x) in the_list: 
    #do whatever 

一個工作,但非可讀的解決方案:

the_list = [1,2,3,4,5] 
for x, y in [(item, get_handler(item) for item in the_list)]: 
    # do something 
+0

當你嘗試時會發生什麼? – 2012-03-05 22:59:55

+2

恕我直言,第一個例子是更pythonic,因爲它更具可讀性,你不會構造一個不必要的列表,你以後就扔掉。 – 2012-03-05 23:00:40

+0

它的工作原理,但它似乎有一個簡單的方法來做到這一點。 – Nix 2012-03-05 23:03:18

回答

2

不,「pythonic」意味着普通的python代碼看起來是怎樣的(參見gnibbler的回答:這就是pythonic的意思)。

如果你想要的東西,會做你想要什麼,你可以這樣做:

def zipMap(func, iterable): 
    for x in iterable: 
     yield x,func(x) 

然後:

for x,y in zipMap(get_handler, the_list): 
    ... 

注意,這不保存任何你打字的。它會爲您節省打字的唯一方法是,如果你使用它討好

def withHandler(iterable): 
    for x in iterable: 
     yield x,get_handler(x) 

在這種情況下,確實爲您節省打字:

for x,y in withHandler(the_list): 
    ... 

因此它可能是,如果合理你碰巧使用它很多。但它不會被認爲是「pythonic」。

0

是,把一個冒號在for線的末端,在y後的空間,並使用4個空格作爲縮進:)

the_list = [1,2,3,4,5] 
for x in the_list: 
    y = get_handler(x) 
    # do something with x and y 
+0

從來沒有我喜歡過這麼諷刺的回答......因爲從來沒有見過這樣的字面意思。 =) – ninjagecko 2012-03-05 23:50:15