Einfache Anführungszeichen gegen doppelte Anführungszeichen in Python [geschlossen]

718

Laut Dokumentation sind sie ziemlich austauschbar. Gibt es einen stilistischen Grund, einen über den anderen zu verwenden?

Schreibgeschützt
quelle

Antworten:

525

Ich verwende gerne doppelte Anführungszeichen um Zeichenfolgen, die für die Interpolation verwendet werden oder Nachrichten in natürlicher Sprache sind, und einfache Anführungszeichen für kleine symbolähnliche Zeichenfolgen, verstoße jedoch gegen die Regeln, wenn die Zeichenfolgen Anführungszeichen enthalten oder wenn ich es vergesse. Ich verwende dreifache doppelte Anführungszeichen für Dokumentzeichenfolgen und rohe Zeichenfolgenliterale für reguläre Ausdrücke, auch wenn sie nicht benötigt werden.

Zum Beispiel:

LIGHT_MESSAGES = {
    'English': "There are %(number_of_lights)s lights.",
    'Pirate':  "Arr! Thar be %(number_of_lights)s lights."
}

def lights_message(language, number_of_lights):
    """Return a language-appropriate string reporting the light count."""
    return LIGHT_MESSAGES[language] % locals()

def is_pirate(message):
    """Return True if the given message sounds piratical."""
    return re.search(r"(?i)(arr|avast|yohoho)!", message) is not None
Will Harris
quelle
4
Interessanterweise benutze ich sie genauso. Ich kann mich nicht erinnern, jemals etwas gelesen zu haben, um mich in diese Richtung zu bewegen. Ich verwende auch dreifache einfache Anführungszeichen für lange Zeichenfolgen, die nicht für Menschen bestimmt sind, wie z. B. rohes HTML. Vielleicht hat es etwas mit englischen Anführungszeichen zu tun.
Mike A
12
Die meisten Python-Codierer codieren es so. Es gibt keine explizite Regel, aber da wir den Code oft so lesen, wird es zur Gewohnheit.
E-Satis
Ich frage mich, ob die einfachen Anführungszeichen für symbolähnliche Dinge tatsächlich aus der Verknüpfung für Anführungszeichen in Lisp / Scheme stammen. In jedem Fall ist es intuitiv. Außerdem, meine Freunde, wenn wir die Richtlinien des PEP 8-Stils befolgen, sollten die Funktionen wirklich die Namen light_message () und is_pirate () heißen.
Yukondude
8
Ich denke, Perl hat zwischen Zeichenfolgen in einfachen Anführungszeichen (keine Interpolation) und Zeichenfolgen in doppelten Anführungszeichen (mit Interpolation) unterschieden und dass Python-Codierer die Gewohnheit möglicherweise geerbt oder nie losgelassen haben.
Daren Thomas
2
Ich verwende dieselbe Konvention und missbrauche sie, indem ich vim alles in dreifachen einfachen Anführungszeichen als SQL hervorheben lasse.
RoundTower
96

Zitieren der offiziellen Dokumente unter https://docs.python.org/2.0/ref/strings.html :

Im Klartext: String-Literale können in übereinstimmende einfache Anführungszeichen (') oder doppelte Anführungszeichen (") eingeschlossen werden.

Es gibt also keinen Unterschied. Stattdessen werden Sie aufgefordert, den Stil auszuwählen, der zum Kontext passt, und konsistent zu sein . Und ich würde dem zustimmen - und hinzufügen, dass es sinnlos ist, "Konventionen" für diese Art von Dingen zu entwickeln, weil Sie am Ende nur Neulinge verwirren werden.

conny
quelle
3
Ja, für mich ist Konsistenz der Schlüssel, deshalb benutze ich überall Singles. Weniger Tastendrücke, eindeutig und konsistent.
mlissner
90

Ich habe es vor 'allem bevorzugt '''docstrings''', wie ich finde """this creates some fluff""". Auch 'ohne die eingegeben werden ShiftTaste auf meiner Schweizerdeutsch Tastatur.

Ich habe seitdem dreifache Anführungszeichen für verwendet """docstrings""", um PEP 257 zu entsprechen .

Daren Thomas
quelle
2
Ich bevorzuge einfache Anführungszeichen, da ich jeden Tag SQL-Code schreibe und einfache Anführungszeichen für Zeichenfolgenliterale in T-SQL verwendet werden. Aber ich verwende dreifache doppelte Anführungszeichen, weil Docstrings manchmal etwas Flusen enthalten können.
Eksortso
4
Wenn ich überall einfache Anführungszeichen für Zeichenfolgen verwende, kann ich Teile des Quellcodes mit drei doppelten Anführungszeichen deaktivieren - Art von '#if 0' und '#endif'.
Dim
12
"erfordert eine Umschalttaste nur auf einer PC-QWERTZ-Tastatur. Auf meiner Tastatur "ist es eigentlich einfacher zu tippen.
E-Satis
6
on my keybord "und 'beide benötigen die Umschalttaste.
Loïc Faure-Lacroix
10
Diese Antwort widerspricht der Python-Konvention. Siehe PEP 257, in dem es heißt: Verwenden Sie aus Gründen der Konsistenz immer dreifache doppelte Anführungszeichen um docstrings. python.org/dev/peps/pep-0257
Buttons840
44

Ich bin bei Will:

  • Doppelte Anführungszeichen für Text
  • Einfache Anführungszeichen für alles, was sich wie ein Bezeichner verhält
  • Doppelte Anführungszeichen für rohe Zeichenfolgenliterale für reguläre Ausdrücke
  • Verdreifachte doppelte Anführungszeichen für Dokumentzeichenfolgen

Ich bleibe dabei, auch wenn es viel Flucht bedeutet.

Ich bekomme den größten Nutzen aus einfach zitierten Bezeichnern, die aufgrund der Anführungszeichen hervorstechen. Der Rest der Praktiken dient nur dazu, diesen einfach zitierten Kennungen Stehplätze zu geben.

Garth Kidd
quelle
26

Wenn die Zeichenfolge, die Sie haben, eine enthält, sollten Sie die andere verwenden. Zum Beispiel "You're able to do this"oder 'He said "Hi!"'. Ansonsten sollten Sie einfach so konsistent wie möglich sein (innerhalb eines Moduls, innerhalb eines Pakets, innerhalb eines Projekts, innerhalb einer Organisation).

Wenn Ihr Code von Personen gelesen wird, die mit C / C ++ arbeiten (oder wenn Sie zwischen diesen Sprachen und Python wechseln), kann die Verwendung ''für Zeichenfolgen mit einem Zeichen und ""für längere Zeichenfolgen den Übergang erleichtern. (Ebenso, um anderen Sprachen zu folgen, in denen sie nicht austauschbar sind).

Der Python - Code , den ich in der freien Natur gesehen habe neigt zu begünstigen "über ', aber nur leicht. Die einzige Ausnahme ist, dass sie """these"""viel häufiger sind als das '''these''', was ich gesehen habe.

Tony Meyer
quelle
21

Dreifach zitierte Kommentare sind ein interessantes Unterthema dieser Frage. PEP 257 gibt dreifache Anführungszeichen für Dokumentzeichenfolgen an . Ich habe eine schnelle Überprüfung mit der Google-Codesuche durchgeführt und festgestellt, dass dreifache doppelte Anführungszeichen in Python etwa zehnmal so beliebt sind wie dreifache einfache Anführungszeichen - 1,3 Millionen gegenüber 131.000 Vorkommen in den Code-Google-Indizes. Im mehrzeiligen Fall wird Ihr Code den Leuten wahrscheinlich vertrauter sein, wenn er dreifache doppelte Anführungszeichen verwendet.

jblocksom
quelle
13
"If you're going to use apostrophes, 
       ^

you'll definitely want to use double quotes".
   ^

Aus diesem einfachen Grund verwende ich außen immer doppelte Anführungszeichen. Immer

Apropos Flusen: Was nützt es, Ihre String-Literale zu optimieren, wenn Sie Escape-Zeichen verwenden müssen, um Apostrophe darzustellen? Beleidigt es Programmierer, Romane zu lesen? Ich kann mir nicht vorstellen, wie schmerzhaft der Englischunterricht in der High School für Sie war!

Droogans
quelle
11
"Wenn Sie etwas" zitieren "wollen, werden Sie auf jeden Fall einfache Anführungszeichen verwenden wollen"
Paolo
Meine Meinung dazu hat sich stark geändert, seit ich das geschrieben habe. Es ist jetzt nur eine Art Situation, in der ich argumentieren würde, dass ich doppelte Anführungszeichen verwenden würde. Eine andere wäre Ihre im Zusammenhang mit der Verwendung von einfachen Anführungszeichen. Weitere Informationen finden Sie in der akzeptierten Antwort zu meiner aktuellen Haltung zu diesem Thema. Ich denke, es ist ein großartiges Beispiel dafür, wie es einem breiten Publikum präsentiert werden sollte.
Droogans
7

Python verwendet Anführungszeichen wie folgt:

mystringliteral1="this is a string with 'quotes'"
mystringliteral2='this is a string with "quotes"'
mystringliteral3="""this is a string with "quotes" and more 'quotes'"""
mystringliteral4='''this is a string with 'quotes' and more "quotes"'''
mystringliteral5='this is a string with \"quotes\"'
mystringliteral6='this is a string with \042quotes\042'
mystringliteral6='this is a string with \047quotes\047'

print mystringliteral1
print mystringliteral2
print mystringliteral3
print mystringliteral4
print mystringliteral5
print mystringliteral6

Welches gibt die folgende Ausgabe:

this is a string with 'quotes'
this is a string with "quotes"
this is a string with "quotes" and more 'quotes'
this is a string with 'quotes' and more "quotes"
this is a string with "quotes"
this is a string with 'quotes'
Michael
quelle
2
"""This is a string with "quotes""""Löst aber einen SyntaxError aus. Wie könnte diese Situation gelöst werden? (wie mit '''This is a string with 'quotes'''')
Dolma33
1
Fügen Sie einen Zeilenumbruch zwischen "Anführungszeichen" und "" "ein
Nicolas
1
@ dolma33 Nicolas 'Vorschlag würde den Inhalt der Zeichenfolge ändern. Eine bessere Lösung ist bereits in der Antwort enthalten: Wenn Ihre Zeichenfolge mit einem Anführungszeichen endet, verwenden Sie das andere dreifache Anführungszeichen. ZB , '''This is a string with "quotes"'''.
jpmc26
3

Ich verwende im Allgemeinen doppelte Anführungszeichen, aber nicht aus einem bestimmten Grund - wahrscheinlich nur aus Gewohnheit von Java.

Ich denke, Sie möchten auch eher Apostrophe in einer Inline-Literalzeichenfolge als doppelte Anführungszeichen.

Matt Sheppard
quelle
3

Persönlich bleibe ich bei dem einen oder anderen. Es spielt keine Rolle. Und wenn Sie einem der beiden Zitate Ihre eigene Bedeutung geben, können Sie andere Personen bei der Zusammenarbeit nur verwirren.

Schwa
quelle
2

Es ist wahrscheinlich mehr als alles andere eine stilistische Präferenz. Ich habe gerade PEP 8 überprüft und keine Erwähnung von einfachen oder doppelten Anführungszeichen gesehen.

Ich bevorzuge einfache Anführungszeichen, weil es nur ein Tastendruck statt zwei ist. Das heißt, ich muss die Umschalttaste nicht drücken, um ein einfaches Anführungszeichen zu erstellen.

Mike
quelle
1
PEP 8 verweist im ersten Satz unter "Documentation Strings" auf PEP 257. In PEP 257 heißt es: Verwenden Sie aus Gründen der Konsistenz immer dreifache doppelte Anführungszeichen um docstrings. Verwenden Sie r "" "rohe dreifache doppelte Anführungszeichen" ", wenn Sie Backslashes in Ihren Dokumentzeichenfolgen verwenden. Verwenden Sie für Unicode-Dokumentzeichenfolgen u "" Unicode-Zeichenfolgen in dreifachen Anführungszeichen "". Trotzdem mag ich das klare Aussehen eines einfachen Anführungszeichens und den Grund für einen Tastendruck, den Sie angegeben haben.
Maxpolk
2

In Perl möchten Sie einfache Anführungszeichen verwenden, wenn Sie eine Zeichenfolge haben, die keine Variablen oder maskierten Zeichen wie \ n, \ t, \ r usw. interpolieren muss.

PHP macht den gleichen Unterschied wie Perl: Inhalt in einfachen Anführungszeichen wird nicht interpretiert (nicht einmal \ n wird konvertiert), im Gegensatz zu doppelten Anführungszeichen, die Variablen enthalten können, deren Wert ausgedruckt werden soll.

Python leider nicht. Technisch gesehen gibt es in Python kein $ -Token (oder ähnliches), um einen Namen / Text von einer Variablen zu trennen. Beide Funktionen machen Python schließlich lesbarer und weniger verwirrend. Einfache und doppelte Anführungszeichen können in Python synonym verwendet werden.

Peterino
quelle
Um das zu verstärken, was Sie sagen, wird \ n in PHP und Perl nur in doppelten Anführungszeichen interpretiert, während in Python sowohl in doppelten als auch in einfachen Anführungszeichen
funktioniert
1
@stivlo: Es sei denn, Sie erstellen daraus eine rohe Zeichenfolge, indem Sie rvor dem Zeichenfolgenliteral hinzufügen . So print 'a\nb'werden Sie zwei Zeilen print r'a\nb'drucken , aber Sie werden eine drucken.
Tadeck
1

Ich habe mich für doppelte Anführungszeichen entschieden, weil sie leichter zu sehen sind.

Andrew Dalke
quelle
1

Ich benutze einfach alles, was mir gerade gefällt. Es ist praktisch, nach Lust und Laune zwischen den beiden wechseln zu können!

Wenn Sie Zitatzeichen zitieren, ist ein Wechsel zwischen beiden natürlich doch nicht so skurril ...


quelle
0

Der Geschmack Ihres Teams oder die Codierungsrichtlinien Ihres Projekts.

Wenn Sie sich in einer mehrsprachigen Umgebung befinden, möchten Sie möglicherweise die Verwendung derselben Art von Anführungszeichen für Zeichenfolgen fördern, die beispielsweise in der anderen Sprache verwendet werden. Sonst gefällt mir persönlich das Aussehen von '

Vinko Vrsalovic
quelle
0

Soweit ich weiß keine. Wenn Sie sich einen Code ansehen, wird "" häufig für Textzeichenfolgen verwendet (ich denke, "ist im Text häufiger als") und "" erscheint in Hashkeys und ähnlichen Dingen.

Mario F.
quelle
0

Ich möchte sowohl Pixel als auch Überraschungen minimieren. Ich bevorzuge normalerweise, 'um Pixel zu minimieren, aber "stattdessen, wenn die Zeichenfolge einen Apostroph hat, wieder, um Pixel zu minimieren. Für ein docstring ich aber lieber """über , '''weil diese nicht-Standard, ungewöhnlich ist, und daher überraschend. Wenn ich jetzt eine Reihe von Zeichenfolgen habe, die ich "gemäß der obigen Logik verwendet habe, aber auch eine, die mit einer davonkommen kann, kann 'ich sie trotzdem verwenden ", um die Konsistenz zu bewahren, nur um Überraschungen zu minimieren.

Vielleicht hilft es, die Philosophie der Pixelminimierung folgendermaßen zu betrachten. Möchten Sie lieber, dass englische Zeichen aussehenA B C oder AA BB CC? Die letztere Wahl verschwendet 50% der nicht leeren Pixel.

Scharfsinn
quelle
-1

Ich verwende doppelte Anführungszeichen, weil ich dies seit Jahren in den meisten Sprachen (C ++, Java, VB…) außer Bash mache, weil ich auch doppelte Anführungszeichen in normalem Text verwende und weil ich eine (modifizierte) nicht-englische Tastatur verwende, bei der Für beide Zeichen ist die Umschalttaste erforderlich.

Philipp
quelle
-4

' = "

/= \=\\

Beispiel:

f = open('c:\word.txt', 'r')
f = open("c:\word.txt", "r")
f = open("c:/word.txt", "r")
f = open("c:\\\word.txt", "r")

Die Ergebnisse sind die gleichen

= >> nein, sie sind nicht gleich Ein einzelner Backslash entgeht Zeichen. In diesem Beispiel haben Sie einfach Glück, weil \kund \wsind keine gültigen Fluchten wie \toder \noder \\oder\"

Wenn Sie einzelne Backslashes verwenden möchten (und diese als solche interpretieren lassen möchten), müssen Sie eine "rohe" Zeichenfolge verwenden. Sie können dies tun, indem Sie ein ' r' vor die Zeichenfolge setzen

im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'

In Bezug auf Pfade in Windows werden Schrägstriche auf die gleiche Weise interpretiert. Die Zeichenfolge selbst ist jedoch eindeutig anders. Ich würde jedoch nicht garantieren, dass sie auf einem externen Gerät so gehandhabt werden.

kn3l
quelle
Heiliger Mist, das ist alt, aber ich wollte trotzdem kommentieren, um darauf hinzuweisen, dass die Verwendung von Schrägstrichen für Windows funktionieren kann, aber immer noch systemabhängig ist. Verwenden Sieos.path.join()
Adam Smith