2017-04-11 7 views
-3

Ich bin neu in Python und ich weiß, Sie „+“ verwenden Strings verketten wie folgt aus:Verketten von Zeichenfolgen mit Leerzeichen?

'foo' + 'bar' 

Heute habe ich über einige Code kam, wo es Strings mit Leerzeichen (Vertiefungen) [Update zu verketten scheint : falsches Beispiel siehe Edit 2 unter]:

SQL = "select col1, col2 " 
     "from table" 

ich habe nicht gefunden, diese Funktion in dem Buch erwähnt oder irgendwo im Web lese ich. Kann mir bitte jemand erklären, dass:

  1. Was bedeutet der Raum in diesem Zusammenhang? Warum funktioniert es?
  2. Wann bevorzugen Sie Leerzeichen über "+"? Für die Lesbarkeit beim Verketten von Strings über mehrere Zeilen hinweg?

Edit: Vielen Dank für Ihre Antworten. Nachdem ich den Code selbst ausprobiert hatte, funktionierte das nicht. Vermutlich habe ich bei der Betrachtung des Codes einige Details übersehen, bevor ich zur Arbeit ging; also schaue ich morgen nach. Allerdings hat die folgende Arbeit (und das machte mich übernehmen die SQL-Beispiel funktioniert, ohne überprüfen zuerst):

x = "foo" "bar" # "foobar" 

Edit 2: Es stellte sich heraus, dass ich ein Paar von Klammern in der SQL-Beispiel oben verpasst. Der eigentliche Code sieht wie folgt aus:

SQL = ("select col1, col2 " 
     "from table") 
+2

Re: 1. Es funktioniert nicht. :) –

+3

Sind Sie sicher, dass der genaue Code war? Werfen Sie einen Blick darauf, es könnte helfen: http://stackoverflow.com/questions/10660435/pythonic-way-to-create-a-long-multi-line-string – Rhexis

+1

Siehe auch http://StackOverflow.com/ Fragen/18842779/Zeichenfolge-Verkettung-ohne-Operator-in-Python, die eine Verknüpfung zu den Dokumenten bezüglich der Regeln um benachbarte Zeichenfolgenliterale hat. –

Antwort

2

String Verkettung automatisch in Python funktioniert, so gibt es keine Notwendigkeit für die + in Ihrem ersten Beispiel. Sie tun können:

>>> "foo" "bar" 
'foobar' 

Aber wenn Sie ein Leerzeichen zwischen foo und bar möchten, entweder an das Ende einer Zeichenfolge hinzugefügt werden muss oder zu Beginn des nächsten.

>>> "foo " "bar" 
'foo bar' 

Parenthised-Ausdrücke können sich auf mehrere Zeilen erstrecken. Sobald Sie einen Paren öffnen, kann Python Zeilenumbrüche ignorieren, bis Sie sie schließen. So funktioniert das auch

>>> ("foo" 
... "bar") 
'foobar' 

>>> ("foo " 
... "bar") 
'foo bar' 

und Ausdrücke in Funktionsaufrufe können auch haben newlines

>>> def baz(sql=''): 
...  print(sql) 
... 
>>> baz(sql="foo " 
...  "bar") 
foo bar 
2

Vom String literals.

Stringliterale können " in passender Apostrophe ' oder doppelte Anführungszeichen gesetzt werden. Sie können auch in übereinstimmende Gruppen von drei einfache oder doppelte Anführungszeichen eingeschlossen werden (diese werden allgemein als dreifach-zitierte Strings bezeichnet). Der Backslash \ Zeichen wird verwendet, um Zeichen zu entkommen, die andernfalls eine besondere Bedeutung haben, wie zum Beispiel Newline, Backslash selbst oder das Anführungszeichen.

SQL = "select col1, col2 " 
     "from table" 

Der obige Code ist ungültig; Sie benötigen einen umgekehrten Schrägstrich:

SQL = "select col1, col2 "\ 
     "from table" 

Zeichenfolgenliterale können sich über mehrere Zeilen erstrecken. Eine Möglichkeit ist es mit Triple-Strings in Anführungszeichen:

s = """select col1, col2 
     from table""" 

Aber sie sind anders, Triple-Strings in Anführungszeichen Sie vielleicht geben zusätzliche Leerzeichen, Tabulatoren und Zeilenumbrüchen.

Verwandte Themen