Virgolette singole vs virgolette doppie [chiuso]


79

Ho appena iniziato un lavoro in cui sto scrivendo Python dopo essere venuto da un background Java, e sto notando che altri sviluppatori tendono a citare stringhe usando virgolette singole ( '') anziché doppie ( ""). Per esempio:

line1 = 'This is how strings typically look.'
line2 = "Not like this."

C'è un motivo particolare per questo oltre alle preferenze personali? È questo il modo corretto di quotare le stringhe? In particolare, ciò che voglio sapere è se esiste un tipo di best practice standard o accettata che guida questo stile di codifica.


5
Se mai in Ruby, c'è in realtà è una differenza tecnica tra virgolette singole e doppie. Le virgolette doppie supportano l'interpolazione di stringhe - le virgolette singole vengono analizzate come valori letterali.
KChaloux,

5
Lo stesso vale per Perl e la maggior parte delle shell.
Blrfl,

18
In che modo questa domanda "non è costruttiva"? In quanto principiante assoluto di Python, devo saperlo. Se scrivi uno script bash, c'è una grande differenza.
Magicsowon,

19
Non costruttivo? Accidenti. Il primo risultato google per "virgolette singole in pitone", ti dice cosa devi sapere rapidamente. Grazie per aver chiesto a Eric e aver risposto a detly
aggieNick02

Risposte:


65

Le altre risposte sono corrette in quanto non fa alcuna differenza tecnica, ma ho visto una regola di stile informale su un paio di progetti open-source: le doppie virgolette vengono utilizzate per le stringhe che potrebbero eventualmente essere visibili all'utente (indipendentemente dal fatto che siano necessarie traduzione) e le virgolette singole sono per stringhe che riguardano la funzionalità del codice stesso (es. chiavi dict, espressioni regolari, SQL).

Questa non è certamente una regola universale (o addirittura codificata in un PEP), quindi come qualsiasi altro aspetto arbitrario della codifica, dipende dalle regole locali.

Nota che PEP 8 (che non avevo notato quando ho scritto questa risposta) dice :

Questo PEP non fornisce raccomandazioni per questo. Scegli una regola e attenersi ad essa. Quando una stringa contiene virgolette singole o doppie, tuttavia, utilizzare l'altra per evitare barre rovesciate nella stringa. Migliora la leggibilità.

Come sottolinea un commentatore, questo non è necessariamente contraddittorio, a seconda di come interpreti la "regola". Quello che suggerisco non funziona davvero con la seconda metà della citazione.


1
Questo può essere in stile house, ma è contro PEP 8: scegline uno e usalo per l'intero file, indipendentemente dal contenuto.
Nils von Barth,

4
@NilsvonBarth Il PEP dice "scegli una regola e seguila", non "scegli un personaggio delimitante e segui". "Le virgolette doppie per il testo visibile dall'utente, le virgolette singole per le cose utilizzate dalla macchina" sembrano una regola perfettamente valida a cui attenersi.
Tanner Swett,

1
@Tanner Swett Siamo spiacenti, hai ragione; è la guida di stile di Google Python che specifica "all'interno di un file" google.github.io/styleguide/pyguide.html#310-strings
Nils von Barth

Il nero formatta effettivamente le stringhe di Python da racchiudere tra virgolette doppie. Anche jslint vuole che le stringhe JavaSciprt siano racchiuse tra virgolette doppie. La maggior parte delle lingue più vecchie non ha nemmeno fornito opzioni. Solo perché puoi farlo non significa che dovresti. Certo, ci sono alcuni casi in cui questa è una cosa molto bella da avere, come quando hai una citazione nella stringa. In pratica, tuttavia, la maggior parte delle stringhe dovrebbe provenire da un set di dati non codificato nella base di codice.
Bobort,

1
@bobort Anche se stai cercando stringhe in una traduzione o in un sistema di interfaccia utente, spesso hai ancora bisogno di chiavi di stringa per quelle nel tuo codice. Ma sono d'accordo sul fatto che le cose siano andate avanti e che non ci sia davvero alcun vantaggio in questa distinzione.
detly

21

È molto semplice:

  • Le virgolette singole consentono l'incorporamento senza escape di virgolette doppie.
  • Le virgolette doppie consentono l'incorporamento di virgolette singole senza escape.

È la maggior parte di Pythonic da utilizzare '(virgolette singole) fino a quando non sono necessarie virgolette doppie.

La seguente citazione proviene direttamente dalla documentazione sui letterali String.

sono disponibili nelle stringhe Unicode. Un prefisso di "b" o "B" viene ignorato in Python 2; indica che il valore letterale dovrebbe diventare un valore letterale di byte in Python 3 (ad es. quando il codice viene convertito automaticamente con 2to3). Un prefisso 'u' o 'b' può essere seguito da un prefisso 'r'.

Nelle stringhe a tre virgolette, le nuove righe e le virgolette senza escape sono consentite (e vengono mantenute), tranne per il fatto che tre virgolette senza escape in una riga terminano la stringa. (Una "virgoletta" è il carattere utilizzato per aprire la stringa, ovvero 'o ".)


15
La domanda ovviamente è: perché Pythonic preferisce le virgolette singole quando quasi tutte le altre lingue usano doppie virgolette?
Martin Beckett,

13
@MartinBeckett because

3
Ahh certo ;-)
Martin Beckett il

6
@JarrodRoberson: Penso che "because" (o 'because', se vuoi) è una risposta valida se è scritto in alcuni PEP (o simili) che è il modo Pythonic . Altrimenti è solo una scelta personale.
Joachim Sauer il

5
le virgolette singole sembrano più pulite e inoltre non è necessario un tasto Maiusc per digitare
JoelFan

17

Dal punto di vista tecnico non fa differenza, dal punto di vista dello stile alcuni pensieri:

  • La maggior parte degli altri linguaggi di programmazione usa virgolette doppie.
  • Quando si scrive in inglese di solito vengono utilizzate le virgolette doppie.
  • Le virgolette singole sono utili quando nella tua applicazione sono presenti molti testi non tecnici / narrativi perché ti consentono di utilizzare le virgolette doppie in modo più naturale. bar = '"It\'s awesome" he said.'
  • Dall'altro lato il carattere a virgoletta singola viene utilizzato anche in alcune occasioni in lingua inglese. bar = "\"It's awesome\" he said."

Nota che "viene spesso utilizzato anche nelle stringhe tecniche -e, g f'hai inviato" {dumb_thing} ma è troppo stupido anche per noi! "
Christian Sauer

4

Non c'è alcuna differenza tra l'uso di virgolette singole e doppie tra virgolette in Python. In termini pratici, a seconda del tipo di dati con cui stai lavorando, potresti trovare uno o l'altro stile più conveniente.

Il tipo di virgolette utilizzato "per impostazione predefinita" (dove non esiste un motivo convincente per utilizzare l'una o l'altra) è praticamente una questione di preferenze personali.

Per ulteriori informazioni, consultare la sezione su String Literals nella documentazione di Python.


4

Alcune cose da considerare quando si sviluppa l'abitudine di utilizzare regolarmente virgolette singole o doppie.

Le virgolette doppie richiedono la digitazione con due dita; e quindi più probabile per errori di battitura e riduzione della velocità

Il tuo editor potrebbe mostrare un personaggio meglio di un altro; per un debug della sintassi visiva più semplice.

Docstrings usa caratteri tripli: quale appare meglio? """""" o ''''''

Anche se non l'ho visto sul sistema operativo Windows, alcuni strumenti di sintassi o documentazione potrebbero aspettarsi virgolette singole con doppio verso.

Per la maggior parte dei tutorial di Python che ho visto, vedo il contrario della tua esperienza. Di solito vedo le virgolette doppie utilizzate.


4

Secondo me preferisco usare le doppie virgolette per una stringa.

Perché? Per i programmatori di altre lingue possono essere adattati rapidamente e comprendere il codice più facilmente.

Se un programmatore C vede:

'Writing "It\'s big?" No.'

Sarà titubante, invece di:

"Writing \"It's big?\" No."

3
"Scrivere \" È grande? \ "No."
API-Bestia

@Lucio Questo è quello che ho fatto, non sapevo se stavo violando una sorta di standard Python consolidato o meno.
Eric Hydrick,

@EricHydrick No, puoi scegliere l'uno o l'altro.
Lucio,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.