Domanda

Secondo la documentazione, sono praticamente intercambiabili.C'è una ragione stilistica per usarne uno piuttosto che l'altro?

È stato utile?

Soluzione

Mi piace usare virgolette doppie attorno alle stringhe utilizzate per l'interpolazione o che sono messaggi in linguaggio naturale e virgolette singole per piccole stringhe simili a simboli, ma infrangerò le regole se le stringhe contengono virgolette o se me ne dimentico.Utilizzo le virgolette triple per le docstring e le stringhe letterali non elaborate per le espressioni regolari anche se non sono necessarie.

Per esempio:

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

Altri suggerimenti

Citando i documenti ufficiali a https://docs.python.org/2.0/ref/strings.html:

In parole povere:Le stringhe letterali possono essere racchiuse tra virgolette singole (') o virgolette doppie (").

Quindi non c'è differenza.Invece, le persone ti diranno di scegliere lo stile che si adatta al contesto, ed essere coerenti.E io sono d'accordo, aggiungendo che è inutile cercare di elaborare "convenzioni" per questo genere di cose perché si finirebbe solo per confondere i nuovi arrivati.

Preferivo ', specialmente per '''docstrings''', come ho scoperto """this creates some fluff""".Anche, ' può essere digitato senza il Spostare tasto sulla mia tastiera svizzero-tedesca.

Da allora sono passato all'utilizzo delle virgolette triple per """docstrings""", conformarsi a PEP 257.

Sono con Will:

  • virgolette doppie per il testo
  • Virgolette singole per tutto ciò che si comporta come un identificatore
  • Stringhe letterali grezze con virgolette doppie per espressioni regolari
  • Virgolette doppie triplicate per le docstring

Continuerò a farlo anche se ciò significa molte fughe.

Ottengo il massimo valore dagli identificatori tra virgolette singole che risaltano a causa delle virgolette.Il resto delle pratiche sono lì solo per dare un po' di spazio a quegli identificatori tra virgolette singole.

Se la stringa che hai ne contiene uno, dovresti usare l'altro.Per esempio, "You're able to do this", O 'He said "Hi!"'.Oltre a ciò, dovresti semplicemente essere il più coerente possibile (all'interno di un modulo, all'interno di un pacchetto, all'interno di un progetto, all'interno di un'organizzazione).

Se il tuo codice verrà letto da persone che lavorano con C/C++ (o se passi da questi linguaggi a Python), allora usando '' per stringhe di un solo carattere e "" per stringhe più lunghe potrebbe aiutare a facilitare la transizione.(Anche per seguire altre lingue dove non sono intercambiabili).

Il codice Python che ho visto in natura tende a favorire " Sopra ', ma solo leggermente.L'unica eccezione è quella """these""" sono molto più comuni di '''these''', da quello che ho visto.

I commenti tra virgolette triple sono un argomento secondario interessante di questa domanda. PEP 257 specifica le virgolette triple per le stringhe di documento.Ho fatto un rapido controllo utilizzando Google Code Search e l'ho trovato virgolette triple doppie in Python sono circa 10 volte più popolari di virgolette singole triple -- 1,3 milioni contro 131.000 di occorrenze negli indici di codice di Google.Quindi, nel caso su più righe, il tuo codice sarà probabilmente più familiare alle persone se utilizza virgolette triple.

"If you're going to use apostrophes, 
       ^

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

Per questo semplice motivo, utilizzo sempre le virgolette doppie all'esterno. Sempre

A proposito di fuffa, a che serve razionalizzare le stringhe letterali con ' se dovrai usare caratteri di escape per rappresentare gli apostrofi?Leggere romanzi offende i programmatori?Non riesco a immaginare quanto sia stato doloroso per te il corso di inglese al liceo!

Python usa virgolette qualcosa del genere:

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

Che dà il seguente output:

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'

Utilizzo le virgolette doppie in generale, ma non per un motivo specifico, probabilmente solo per abitudine di Java.

Immagino che sia anche più probabile che tu voglia gli apostrofi in una stringa letterale in linea piuttosto che le virgolette doppie.

Personalmente rimango con l'uno o con l'altro.Non importa.E fornire il tuo significato a entrambe le citazioni serve solo a confondere le altre persone quando collabori.

Probabilmente è più una preferenza stilistica che altro.Ho appena controllato PEP 8 e non ho visto alcuna menzione di virgolette singole o doppie.

Preferisco le virgolette singole perché è solo una sequenza di tasti invece di due.Cioè, non devo premere il tasto Maiusc per creare virgolette singole.

In Perl vuoi usare le virgolette singole quando hai una stringa che non necessita di interpolare variabili o caratteri di escape come , , , ecc.

PHP fa la stessa distinzione di Perl:il contenuto tra virgolette singole non verrà interpretato (nemmeno verrà convertito), al contrario delle virgolette doppie che possono contenere variabili per cui viene stampato il valore.

Python no, temo.Dal punto di vista tecnico, non esiste un token $ (o simili) per separare un nome/testo da una variabile in Python.Dopotutto, entrambe le funzionalità rendono Python più leggibile e meno confuso.Le virgolette singole e doppie possono essere usate in modo intercambiabile in Python.

Ho scelto di utilizzare le virgolette doppie perché sono più facili da vedere.

Uso semplicemente ciò che colpisce la mia fantasia in quel momento;è comodo poter passare da uno all'altro a piacimento!

Naturalmente, quando si citano i caratteri delle virgolette, passare dall'uno all'altro potrebbe non essere così stravagante, dopotutto...

Il gusto del tuo team o le linee guida di codifica del tuo progetto.

Se ti trovi in ​​un ambiente multilingue, potresti voler incoraggiare l'uso dello stesso tipo di virgolette per le stringhe utilizzate, ad esempio, dall'altra lingua.Altrimenti, personalmente preferisco l'aspetto di '

Nessuno per quanto ne so.Tuttavia, se guardi del codice, " " è comunemente usato per stringhe di testo (suppongo che ' sia più comune all'interno del testo rispetto a "), e ' ' appare negli hashkey e cose del genere.

Il mio obiettivo è ridurre al minimo sia i pixel che la sorpresa.Di solito preferisco ' per ridurre al minimo i pixel, ma " se invece la stringa ha un apostrofo, sempre per minimizzare i pixel.Per una docstring, tuttavia, preferisco """ Sopra ''' perché quest'ultimo è non standard, insolito e quindi sorprendente.Se ora ho un mucchio di corde dove ho usato " secondo la logica di cui sopra, ma anche uno che può farla franca a ', potrei ancora usarlo " in esso per preservare la coerenza, solo per ridurre al minimo la sorpresa.

Forse è utile pensare alla filosofia di minimizzazione dei pixel nel modo seguente.Preferiresti che i caratteri inglesi assomigliassero A B C O AA BB CC?Quest'ultima scelta spreca il 50% dei pixel non vuoti.

Uso le virgolette doppie perché lo faccio da anni nella maggior parte dei linguaggi (C++, Java, VB...) tranne Bash, perché utilizzo le virgolette doppie anche nel testo normale e perché sto usando una tastiera non inglese (modificata) dove entrambi i caratteri richiedono il tasto Maiusc.

' = "

/ = \ = \\

esempio :

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

I risultati sono gli stessi

=>> no, non sono la stessa cosa.Una singola barra rovesciata farà sfuggire i caratteri.Ti è capitato di essere fortunato in quell'esempio perché \k E \w non sono escape validi come \t O \n O \\ O \"

Se vuoi usare singole barre rovesciate (e interpretarle come tali), allora devi usare una stringa "grezza".Puoi farlo inserendo un 'r' davanti alla stringa

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

Per quanto riguarda i percorsi in Windows, le barre vengono interpretate allo stesso modo.Chiaramente però la stringa stessa è diversa.Tuttavia, non garantirei che vengano gestiti in questo modo su un dispositivo esterno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top