2014-04-09 6 views
8

Zur Zeit, um einfache Anführungszeichen um einen String hinzuzufügen, war die beste Lösung, die ich mir ausgedacht hatte, eine kleine Wrapper-Funktion.Python 2.X Hinzufügen von einfachen Anführungszeichen um einen String

def foo(s1): 
    return "'" + s1 + "'" 

Gibt es eine leichtere pythische Art, dies zu tun?

+2

Was ist der Kontext (Gründe/warum) dafür? Was ist, wenn Ihre Zeichenfolge Zitate enthält? Wie auch immer, versuchen Sie 's1 .__ repr __()' mit verschiedenen Strings und sehen Sie, ob dieses Verhalten zu Ihrer gewünschten Verwendung passt. – metatoaster

+0

@metatoaster Ich muss im Grunde viele Zeichenfolgen '+' verketten, einige, die die einfachen Anführungszeichen brauchen und andere nicht, um Zeilen zu sparen, kam ich mit der obigen Lösung – pyCthon

+1

Was ist, wenn Sie eine Zeichenfolge gefunden haben, die übereinstimmt Ihr Single-Anführungszeichen-Kriterium hat aber auch ein einfaches Anführungszeichen (wie zum Beispiel "das ist"). Wenn Sie Ihre Methode verwenden, würde dies zu "Das ist" führen. Ist das für Ihr System vorgesehen/zulässig? Außerdem wird empfohlen, 'str.join' über eine Liste von Zeichenfolgen zu verwenden, anstatt' + 'zu verwenden, um einzelne Zeichenfolgenfragmente aus Leistungsgründen zusammenzufügen. – metatoaster

Antwort

10

Hier ist eine andere (vielleicht mehr pythonic) Option, mit format strings:

def foo(s1): 
    return "'{}'".format(s1) 
12

Was:

def foo(s1): 
    return "'%s'" % s1 
+0

Dies wurde von Stackoverflow als Post mit niedriger Qualität gekennzeichnet.Der Kommentar ist nur einer der Standard-Ausstechformen aus SO – Rico

+0

Diese Syntax für Format-Strings ist veraltet, zugunsten der 'format()' -Methode, wie in my gezeigt antwort –

+5

@Rico: Dies ist offensichtlich eine Antwort, im Zweifelsfall bitte nicht rezensieren und definitiv nicht nur Keks Kommentare Kommentare für ihre eigenen Willen. – BoltClock

8

Ich wollte nur hervorheben, was @metatoaster oben im Kommentar sagte, als ich es verpasst zu Beginn.

Mit repr (string) werden einfache Anführungszeichen, dann doppelte Anführungszeichen außerhalb dieser Anführungszeichen, dann einfache Anführungszeichen außerhalb davon mit eingebetteten inneren Anführungszeichen, dann auf andere Escapezeichen hinzugefügt.

Mit repr(), wie eine eingebaute, direkterer ist, es sei denn, andere Konflikte sind ..

s = 'strOrVar' 
print s, repr(s), repr(repr(s)), ' ', repr(repr(repr(s))), repr(repr(repr(repr(s)))) 

# prints: strOrVar 'strOrVar' "'strOrVar'" '"\'strOrVar\'"' '\'"\\\'strOrVar\\\'"\'' 

Der docs Zustand sein im Allgemeinen Zustand repr(), dh Darstellung ist das Gegenteil von eval():

„Für viele Arten, macht diese Funktion einen Versuch, eine Zeichenfolge zurück, die ein Objekt mit dem gleichen Wert ergeben würde, wenn eval() übergibt, ..“

Backquotes wären kürzer, aber removed in Python 3+. Interessanterweise verwendet StackOverflow Backquotes, um Codebereiche anzugeben, anstatt einen Codeblock zu markieren und auf den Code-Button zu klicken - es hat jedoch ein interessantes Verhalten.

Verwandte Themen