2017-07-03 13 views
0

という方法で次の式を書きますが、変数を2回繰り返さないでしょうか? を複数回書き込む必要があるときは、非常に迷惑です。リストの理解とイテレータを使った些細な煩わしさ

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

fwiw私は、このようなコードの短縮を目指すことは、コードをあまり明示的でなく推論するのが難しいと考えています。 「Pythonのzen」(https://www.python.org/dev/peps/pep-0020/)「Explicitは暗黙より優れています。」を覚えておいてください。 –

答えて

2

forループの場合とまったく同じですね。 *x構文はあなたが同様に(1つの変数のみ)の上に書いたものを短くするかもしれない、私は今、パラメータ展開を実現

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

:とにかく、あなたはマップを使用することができます。あなたがsomeFormatString.format(*x)を適用する場合は常に、あなたのフォーマッタを生成する機能を使って、これを短縮することができます。

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

は、その後、あなたは

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

にマッピングし、異なるフォーマット文字列でそれを切り替えることができます。

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

*args-magicを使用して:あなたはそこに着くことができる唯一のマイナーチェンジで

+0

私はパラメータの拡張についてはわかりませんでした。 – susdu

+0

@susdu私はグーグルで '* args'と' ** kwargs'を提案します。あなたが行うことができる複数の素晴らしいことがあります。 – kabanus

1

関連する問題