2012-06-11 19 views
27

私は作成したい引数を持つ非常に長い文字列を持っているとしましょう。 私はあなたが引数を含む複数行の文字列。宣言する方法?

cmd = """line 1 
     line 2 
     line 3""" 

で複数行の文字列を作成することができます知っている。しかし、今、私は1、2、および3引数として渡したいと言うことができます。

これは

cmd = """line %d 
     line %d 
     line %d""" % (1, 2, 3) 

に動作します。しかし、私は30+の引数を持つスーパー長い文字列を持っている場合、どのように私はおそらく複数行でこれらの引数を渡すことができますか?それらを1行に渡すことは、複数行の文字列を作成しようとする目的をも凌駕します。

事前の助力と洞察力をお持ちの方に感謝します。

答えて

19

括弧(とカンマ,の行継続プロパティを悪用する可能性があります。

cmd = """line %d 
     line %d 
     line %d""" % (
     1, 
     2, 
     3) 
+0

ありがとうございます。まさに私が探していたもの。角かっこを使用するときに複数の行を持つことができることは決してありませんでした。これは大きな助けになる! – Quillion

2

これは私の作品:

cmd = "line %d\n"%1 +\ 
     "line %d\n"%2 +\ 
     "line %d\n"%3 

[EDIT::]で

cmd = """line %d 
     line %d 
     line %d""" % (
      1, 
      2, 
      3 
    ) 
3

それらが挿入されているのと同じラインで引数を持っているために、あなたはこのようにそれを行うことができます私がこれを思いついた最初のコメントに返信してください:

cmd = "\n".join([ 
     "line %d"%1, 
     "line %d"%2, 
     "line %d"%3]) 
+0

30以上の引数でそれを行うことはあまり効率的ではありません。一方、リスト上の.join()は... :) –

48

名前付き引数を使用できるstr.format()関数を使用できます。だから、

'''line {0} 
line {1} 
line {2}'''.format(1,2,3) 

はもちろん、あなたがtupleまたはlistに渡すことができるように、Pythonの*args構文を使用して、これを拡張することができます。

args = (1,2,3) 
'''line {0} 
line {1} 
line {2}'''.format(*args) 

あなたが賢くあなたの引数に名前を付けることができた場合は、(ほとんどのタイピング集約型の1が)最も堅牢なソリューションは、辞書に渡すためにPythonの**kwargs構文を使用することです。

args = {'arg1':1, 'arg2':2, 'arg3':3} 
'''line {arg1} 
line {arg2} 
line {arg3}'''.format(**args) 

str.format()ミニ言語の詳細については、こちらをご覧ください:http://docs.python.org/library/string.html#format-string-syntax

+1

+1 ** kwargs形式は、OPの例ではないが、多くのシナリオで読みやすくするのに最適です。 – Darthfett

2

つ以上の変異体をString.Formatの()と - 機能。

s = "{0} " \ 
    "{1} " \ 
    "{2}" \ 
    .format("Hello", "world", "from a multiline string")  
print(s) 
1

最も簡単な方法は、(Pythonの3.6から市販以降、すべての引数が範囲内にあると仮定して)literal string interpolationを使用するかもしれません。

cmd = f"""line {1} 
     line {2} 
     line {3}""" 
関連する問題