2017-07-03 53 views
0

有沒有辦法用 的方式寫下面的表達式,我不會重複兩次變量?當你必須多次寫入時,這是非常煩人的 。極小的煩惱與列表理解和迭代器

['hello {} {}'.format(A,B) for A,B in product(As,Bs)] 
+0

fwiw我認爲爭取這樣的代碼縮短使得代碼更加清晰和難以推理。請記住[python的禪宗](https://www.python.org/dev/peps/pep-0020/)'顯式比隱式更好。 –

回答

2

這正是你要做的for循環,不是嗎?無論如何,你可以使用地圖:

map(lambda x:'hello {} {}'.format(*x), product(As,Bs)] 

我意識到現在的參數擴展*x語法,可能會縮短你做成以上(只有一個變量)寫道。如果你打算申請someFormatString.format(*x)總是可以縮短這個用函數產生格式化程序:

def mkStr(formatStr): 
    return lambda x,f=formatStr: f.format(*x) 

然後你就可以用

map(mkStr('hello {} {}'), product(As,Bs)] 

地圖和不同格式字符串轉換起來。

+0

我不知道參數擴展,謝謝 – susdu

+0

@susdu我建議使用'* args'和** ** kwargs'。你可以做很多漂亮的事情。 – kabanus

1

,只有一個小的改動,你可以到那裏:

['hello {} {}'.format(*ab) for ab in product(As, Bs)] 

使用*args-magic