Guillemets simples vs guillemets doubles [fermé]


79

Je viens juste de commencer un travail où j'écris en Python après être venu de Java, et je remarque que d'autres développeurs ont tendance à citer des chaînes en utilisant des guillemets simples ( '') au lieu de guillemets doubles ( ""). Par exemple:

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

Existe-t-il une raison particulière à cette préférence autre que personnelle? Est-ce la bonne façon de citer des chaînes? Plus précisément, ce que je veux savoir, c’est s’il existe un type de pratique exemplaire ou standard acceptée qui régit ce type de codage.


5
Si vous vous en mêlez un jour Ruby, il existe une différence technique entre les guillemets simples et doubles. Les guillemets doubles prennent en charge l'interpolation des chaînes - les guillemets simples sont analysés comme des littéraux.
KChaloux

5
La même chose est vraie pour Perl et la plupart des obus.
Blrfl

18
Comment cette question est-elle "non constructive"? En tant que débutant absolu sur Python, j'ai besoin de le savoir. Si vous écrivez en script bash, il y a une grande différence.
Magicsowon

19
Pas constructif? Décidément. Le premier résultat Google pour "python single double quotes" vous indique rapidement ce que vous devez savoir. Merci d'avoir posé la question à Eric et de l'avoir répondu
aggieNick02

Réponses:


65

Les autres réponses sont correctes en ce sens que cela ne fait aucune différence technique, mais j’ai déjà observé une règle de style informelle sur quelques projets à code source ouvert: les guillemets doubles sont utilisés pour les chaînes pouvant éventuellement être visibles par l’utilisateur (qu’ils aient ou non besoin de translation), et les guillemets simples sont pour des chaînes qui se rapportent à la fonctionnalité du code lui-même (par exemple, les clés dict, expressions régulières, SQL).

Ce n'est certainement pas une règle universelle (ni même codifiée dans un PEP), donc, comme tout autre aspect arbitraire du codage, il s'agit de règles locales.

Notez que PEP 8 (que je n'avais pas remarqué lorsque j'ai écrit cette réponse) dit :

Ce PPE ne fait aucune recommandation à ce sujet. Choisissez une règle et respectez-la. Lorsqu'une chaîne contient des guillemets simples ou doubles, utilisez l'autre pour éviter les barres obliques inverses dans la chaîne. Cela améliore la lisibilité.

Comme le souligne un commentateur, ce n'est pas nécessairement contradictoire, cela dépend de la manière dont vous interprétez la "règle". Ce que je suggère ne fonctionne pas vraiment avec la deuxième moitié de la citation cependant.


1
C’est peut-être du style maison, mais c’est contre PEP 8: choisissez-en un et utilisez-le pour tout le fichier, quel que soit son contenu.
Nils von Barth le

4
@NilsvonBarth Le PEP dit "choisissez une règle et respectez-la", pas "choisissez un caractère de délimitation et respectez-la". "Les guillemets doubles pour le texte visible par l'utilisateur, les guillemets simples pour les éléments utilisés par la machine" semblent être une règle parfaite à respecter.
Tanner Swett

1
@ Tanner Swett Désolé, vous avez raison; C'est le guide de style Google Python qui spécifie «dans un fichier» google.github.io/styleguide/pyguide.html#310-strings
Nils von Barth

En fait, Black formate les chaînes Python pour qu'elles soient entourées de guillemets doubles. Même jslint souhaite que les chaînes JavaSciprt soient entourées de guillemets doubles. La plupart des langues plus anciennes n'ont même jamais fourni d'options. Ce n'est pas parce que tu peux le faire que tu devrais le faire. Bien sûr, il y a quelques cas où c'est une très bonne chose à avoir, comme quand vous avez une citation dans la chaîne. En pratique, cependant, la plupart de vos chaînes doivent provenir d'un ensemble de données qui n'est pas codé en dur dans votre base de code.
Bobort le

1
@bobort Même si vous recherchez des chaînes dans un système de traduction ou d'interface utilisateur, vous avez toujours besoin de clés de chaîne pour celles de votre code. Mais je conviens que les choses ont évolué et que cette distinction ne présente aucun avantage.
Détly

21

C'est très simple:

  • Les guillemets simples permettent l'incorporation non échappée de guillemets doubles.
  • Les guillemets doubles permettent l'incorporation de guillemets simples non échappés.

La plupart des Pythonic sont utilisés '(guillemets simples) jusqu'à ce que vous ayez besoin de guillemets doubles.

La citation suivante est directement issue de la documentation sur les littéraux de chaîne.

sont disponibles dans les chaînes Unicode. Un préfixe 'b' ou 'B' est ignoré dans Python 2; cela indique que le littéral doit devenir un littéral d'octets dans Python 3 (par exemple, lorsque le code est automatiquement converti avec 2to3). Un préfixe "u" ou "b" peut être suivi d'un préfixe "r".

Dans les chaînes entre guillemets triples, les nouvelles lignes et les guillemets non évités sont autorisés (et sont conservés), à l'exception du fait que trois guillemets non échappés d'une ligne terminent la chaîne. (Une "citation" est le caractère utilisé pour ouvrir la chaîne, c'est-à-dire "ou".)


15
La question qui se pose est bien la suivante: pourquoi Pythonic préfère-t-il préférer les guillemets simples lorsque presque toutes les autres langues utilisent des guillemets doubles?
Martin Beckett

13
@MartinBeckett parce que

3
Ahh bien sûr ;-)
Martin Beckett

6
@JarrodRoberson: Je pense que "parce que" (ou "parce que, si vous voulez) est une réponse valide si elle est écrite dans un PEP (ou similaire) qu'il s'agisse de la façon Pythonic . Sinon, c'est juste un choix personnel.
Joachim Sauer le

5
les guillemets simples ont une apparence plus
nette

17

Du point de vue technique, cela ne fait aucune différence, du point de vue du style, quelques réflexions:

  • La plupart des autres langages de programmation utilisent des guillemets doubles.
  • Lorsque vous écrivez en anglais, vous utilisez généralement des guillemets doubles.
  • Les guillemets simples sont utiles lorsque votre application contient beaucoup de texte non technique / narratif, car ils vous permettent d'utiliser des guillemets doubles de manière plus naturelle. bar = '"It\'s awesome" he said.'
  • De l'autre côté, le caractère guillemet simple est également utilisé à quelques reprises en anglais. bar = "\"It's awesome\" he said."

Notez que "est souvent utilisé dans les chaînes techniques, aussi -e, g f'you soumis" {dumb_thing} mais c'est trop bête même pour nous! '
Christian Sauer le

4

Il n'y a pas de différence entre utiliser des guillemets simples et des guillemets doubles en Python. Concrètement, selon le type de données sur lequel vous travaillez, vous pouvez trouver l’un ou l’autre style plus pratique.

Le type de guillemets utilisé "par défaut" (lorsqu'il n'existe aucune raison impérieuse d'utiliser l'une ou l'autre) dépend en grande partie de vos préférences personnelles.

Pour plus d'informations, consultez la section sur les littéraux de chaîne dans la documentation Python.


4

Quelques points à considérer lorsque vous développez votre habitude d’utiliser régulièrement des guillemets simples ou doubles.

Les guillemets doubles nécessitent une saisie à deux doigts; et donc plus susceptible d'erreurs de frappe ainsi qu'une diminution de la vitesse

Votre éditeur peut montrer un caractère mieux qu'un autre; pour faciliter le débogage visuel de la syntaxe.

Les chaînes de caractères utilisent des caractères triples: lequel est le mieux? """""" ou ''''''

Bien que je ne l’aie pas vu sous Windows, certains outils de syntaxe ou de documentation peuvent s’attendre à des guillemets doubles.

Pour la plupart des tutoriels Python que j'ai vus, je vois le contraire de votre expérience. Je vois habituellement les guillemets doubles utilisés.


4

À mon avis, je préfère utiliser les guillemets doubles pour une chaîne.

Pourquoi? Pour les programmeurs d' autres langues peuvent être adaptés rapidement et comprendre le code plus facilement.

Si un programmeur C voit:

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

Sera hésitant, au lieu de:

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

3
"Ecrire \" C'est grand? \ "Non."
API-Beast

@ Lucio C'est ce que je faisais, je ne savais pas si je violais une sorte de standard Python établi ou non.
Eric Hydrick

@EricHydrick Non, vous pouvez choisir l'un ou l'autre.
Lucio
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.