web-dev-qa-db-fra.com

Y a-t-il une différence entre "chaîne" et "chaîne" en Python?

En PHP, une chaîne entre guillemets doubles sera analysée pour les variables à remplacer, contrairement à une chaîne entre guillemets simples. En Python, cela s'applique-t-il également?

60
DavidM

Non :

2.4.1. Littéraux chaîne et octets

... En anglais: les deux types de littéraux peuvent être placés entre guillemets simples correspondants (') ou des guillemets doubles ("). Ils peuvent également être inclus dans des groupes correspondants de trois guillemets simples ou doubles (ceux-ci sont généralement appelés chaînes à guillemets triples). La barre oblique inverse (\) est utilisé pour échapper les caractères qui ont autrement une signification spéciale, comme la nouvelle ligne, la barre oblique inverse ou le caractère de citation ...

113
Milen A. Radev

Python est l'un des rares (?) Langages où 'et "ont des fonctionnalités identiques. Le choix pour moi dépend généralement de ce qu'il contient. Si je vais citer une chaîne contenant des guillemets simples, j'utiliserai des guillemets doubles et vice versa, pour éviter d'avoir à échapper les caractères de la chaîne.

Exemples:

"this doesn't require escaping the single quote"
'she said "quoting is easy in python"'

Ceci est documenté sur la page "String Literals" de la documentation python:

37
Bryan Oakley

Dans certaines autres langues, les méta-caractères ne sont pas interprétés si vous utilisez des guillemets simples. Prenez cet exemple en Ruby:

irb(main):001:0> puts "string1\nstring2"
string1
string2
=> nil
irb(main):002:0> puts 'string1\nstring2'
string1\nstring2
=> nil

En Python, si vous voulez que la chaîne soit prise au pied de la lettre, vous pouvez utiliser des chaînes brutes (une chaîne précédée du caractère 'r'):

>>> print 'string1\nstring2'
string1
string2
>>> print r'string1\nstring2'
string1\nstring2
8
Bruno Gomes

L'interpréteur interactif Python préfère les guillemets simples:

>>> "text"
'text'

>>> 'text'
'text'

Cela pourrait être déroutant pour les débutants, donc je m'en tiendrai aux guillemets simples (sauf si vous avez des normes de codage différentes).

3
user245396

Les chaînes entre guillemets simples et doubles dans Python sont identiques. La seule différence est que les chaînes entre guillemets simples peuvent contenir des guillemets doubles sans échappement, et vice versa. Par exemple:

'a "quoted" Word'
"another 'quoted' Word"

Là encore, il existe des chaînes entre guillemets triples, qui permettent de ne pas échapper à la fois les caractères de citation et les sauts de ligne.

Vous pouvez substituer des variables dans une chaîne en utilisant des spécificateurs nommés et la fonction locale () intégrée:

name = 'John'
lastname = 'Smith'
print 'My name is %(name)s %(lastname)s' % locals()  # prints 'My name is John Smith'
3
efotinis

La différence entre "et" la citation de chaîne est juste dans le style - sauf que l'un supprime le besoin d'échapper l'autre à l'intérieur du contenu de la chaîne.

Style

PEP8 recommande une règle cohérente, PEP257 suggère que les docstrings utilisent des guillemets doubles triples.

En Python, les chaînes entre guillemets simples et les chaînes entre guillemets doubles sont identiques. Ce PEP ne fait aucune recommandation à ce sujet. Choisissez une règle et respectez-la. Toutefois, lorsqu'une chaîne contient des guillemets simples ou doubles, utilisez l'autre pour éviter les barres obliques inverses dans la chaîne. Il améliore la lisibilité.

Pour les chaînes entre guillemets triples, utilisez toujours des guillemets doubles pour être cohérent avec la convention docstring dans PEP 257.

Cependant, la pratique est largement utilisée pour préférer les guillemets doubles pour les chaînes de langage naturel (y compris l'interpolation) - donc tout ce qui est potentiellement candidat pour I18N. Et des guillemets simples pour les chaînes techniques: symboles, caractères, chemins, options de ligne de commande, REGEX techniques, ...

(Par exemple, lors de la préparation du code pour I18N, j'exécute un REGEX semi-automatique convertissant rapidement les chaînes entre guillemets doubles pour utiliser par exemple gettext)

3
kxr

Il y a 3 façons de qouter des chaînes en python: "chaîne" 'chaîne "" "" chaîne chaîne "" "elles produisent toutes le même résultat.

0
Vasil

Il n'y a aucune différence en Python, et vous pouvez vraiment l'utiliser à votre avantage lors de la génération XML. Une syntaxe XML correcte nécessite des guillemets autour des valeurs d'attribut, et dans de nombreux langages, comme Java, cela vous oblige à y échapper lors de la création d'une chaîne comme celle-ci:

String HtmlInJava = "<body bgcolor=\"Pink\">"

Mais en Python, vous utilisez simplement l'autre citation et assurez-vous d'utiliser la citation finale correspondante comme ceci:

html_in_python = '<body bgcolor="Pink">'

Assez sympa hein? Vous pouvez également utiliser trois guillemets doubles pour démarrer et terminer les chaînes multilignes, avec les fin de vie inclus comme ceci:

multiline_python_string = """
This is a multi-line Python string which contains line breaks in the 
resulting string variable, so this string has a '\n' after the Word
'resulting' and the first Word 'Word'."""
0
Steve Moyer