2012-06-11 14 views
27

Angenommen, ich habe eine extrem lange Zeichenfolge mit Argumenten, die ich erstellen möchte. Ich weiß, Sie Mehrzeilige Zeichenfolge mit Argumenten. Wie deklariere ich?

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

eine mehrzeilige Zeichenfolge mit

erstellen Aber jetzt kann sagen, dass ich 1 übergeben will, 2 und 3 als Argumente.

Dies funktioniert

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

Aber wenn ich eine super lange Zeichenfolge mit mehr als 30 Argumente haben, wie kann ich möglicherweise diese Argumente in mehreren Zeilen bestehen? Wenn Sie sie in einer einzigen Zeile übergeben, wird sogar der Versuch umgangen, eine mehrzeilige Zeichenfolge zu erstellen.

Danke an alle im Voraus für ihre Hilfe und Einsicht.

Antwort

19

Sie könnten die Zeilenfortsetzungseigenschaften der Klammer ( und das Komma , missbrauchen.

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

Vielen Dank. Genau das, was ich gesucht habe. Ich wusste nie, dass ich mehrere Zeilen haben könnte, wenn ich Klammern benutze. Das ist eine große Hilfe !!! – Quillion

2

Dies funktioniert für mich:

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

die Argumente in der gleichen Zeile haben, die sie eingesetzt sind, können Sie es wie dies tun könnte:

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

[EDIT:] In antworten Sie auf den ersten Kommentar Ich kam mit dieser:

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

Dies mit mehr als 30 Argumenten zu tun wäre nicht sehr effizient. '" ".join()' auf einer Liste, auf der anderen Seite ... :) –

48

Sie könnten die Funktion str.format() verwenden, die benannte Argumente zulässt. So

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

Sie könnten natürlich erweitern diese *args Syntax der Python mit Ihnen zu erlauben, in einem tuple oder list zu passieren.

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

Wenn Sie intelligent Ihre Argumente nennen kann, die robusteste Lösung (obwohl die meisten Typisierung intensive eins) wäre Pythons **kwargs Syntax zu verwenden, in einem Wörterbuch zu übergeben.

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

Weitere Informationen über die str.format() Mini-Sprache, gehen Sie hier: http://docs.python.org/library/string.html#format-string-syntax

+1

+1 Das ** kwargs-Format eignet sich hervorragend für die Lesbarkeit für viele Szenarien (obwohl vielleicht nicht das Beispiel des OP). – Darthfett

2

Eine weitere Variante mit dem string.format() - Funktion.

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

Der einfachste Weg literal string interpolation (erhältlich von Python 3.6 ab und unter der Annahme, alle Argumente sind in scope) zu verwenden, könnte sein.

cmd = f"""line {1} 
     line {2} 
     line {3}""" 
Verwandte Themen