Selon la documentation, ils sont à peu près interchangeables. Y a-t-il une raison stylistique à utiliser l'un sur l'autre?
Selon la documentation, ils sont à peu près interchangeables. Y a-t-il une raison stylistique à utiliser l'un sur l'autre?
Réponses:
J'aime utiliser des guillemets doubles autour des chaînes qui sont utilisées pour l'interpolation ou qui sont des messages en langage naturel, et des guillemets simples pour les petites chaînes de type symbole, mais enfreindront les règles si les chaînes contiennent des guillemets, ou si j'oublie. J'utilise des guillemets triples pour les docstrings et les littéraux de chaînes brutes pour les expressions régulières même si elles ne sont pas nécessaires.
Par exemple:
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
Citant les documents officiels sur https://docs.python.org/2.0/ref/strings.html :
En clair: les littéraux de chaîne peuvent être placés entre guillemets simples (') ou doubles (").
Il n'y a donc aucune différence. Au lieu de cela, les gens vous diront de choisir le style qui correspond au contexte et d'être cohérent . Et je serais d'accord - ajoutant qu'il est inutile d'essayer de trouver des "conventions" pour ce genre de chose parce que vous finirez par confondre les nouveaux arrivants.
J'avais l'habitude de préférer '
, surtout pour '''docstrings'''
, comme je trouve """this creates some fluff"""
. Aussi, '
peut être tapé sans la Shifttouche sur mon clavier suisse allemand.
J'ai depuis changé pour utiliser des guillemets triples pour """docstrings"""
, pour me conformer au PEP 257 .
"
nécessite une touche Maj uniquement sur un clavier PC QWERTY. Sur mon clavier, "
c'est en fait plus facile à taper.
Je suis avec Will:
Je m'en tiendrai à cela même si cela signifie beaucoup d'évasion.
J'obtiens le plus de valeur des identificateurs simples entre guillemets qui se distinguent à cause des citations. Le reste des pratiques est là juste pour donner à ces identifiants cités un peu de place.
Si la chaîne que vous avez en contient une, vous devez utiliser l'autre. Par exemple "You're able to do this"
, ou'He said "Hi!"'
. En dehors de cela, vous devez simplement être aussi cohérent que possible (au sein d'un module, au sein d'un package, au sein d'un projet, au sein d'une organisation).
Si votre code va être lu par des personnes qui travaillent avec C / C ++ (ou si vous basculez entre ces langages et Python), alors utilisez ''
pour des chaînes de caractères uniques, et""
de chaînes plus longues peut aider à faciliter la transition. (De même pour suivre d'autres langues où elles ne sont pas interchangeables).
Le code Python Je l' ai vu dans la nature tend à favoriser "
plus '
, mais seulement un peu. La seule exception est qu'ils """these"""
sont beaucoup plus courants que '''these'''
, d'après ce que j'ai vu.
Les commentaires triples sont un sous-sujet intéressant de cette question. PEP 257 spécifie des guillemets triples pour les chaînes de doc . J'ai fait une vérification rapide en utilisant Google Code Search et j'ai constaté que les doubles guillemets doubles en Python sont environ 10 fois plus populaires que les guillemets simples triples - 1,3 M contre 131 000 occurrences dans le code Google indexes. Donc, dans le cas de plusieurs lignes, votre code sera probablement plus familier aux gens s'il utilise des guillemets doubles.
"If you're going to use apostrophes,
^
you'll definitely want to use double quotes".
^
Pour cette simple raison, j'utilise toujours des guillemets doubles à l'extérieur. Toujours
En parlant de peluches, à quoi sert de rationaliser vos littéraux de chaîne avec 'si vous devez utiliser des caractères d'échappement pour représenter des apostrophes? Cela choque-t-il les codeurs de lire des romans? Je ne peux pas imaginer à quel point les cours d'anglais au lycée étaient douloureux pour vous!
Python utilise des guillemets comme ceci:
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
Ce qui donne la sortie suivante:
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'
"""This is a string with "quotes""""
déclenche une SyntaxError. Comment résoudre cette situation? (idem qu'avec '''This is a string with 'quotes''''
)
'''This is a string with "quotes"'''
.
J'utilise des guillemets doubles en général, mais pas pour une raison spécifique - Probablement juste par habitude de Java.
Je suppose que vous êtes également plus susceptible de vouloir des apostrophes dans une chaîne littérale en ligne que de vouloir des guillemets doubles.
C'est probablement une préférence stylistique plus que tout. Je viens de vérifier PEP 8 et je n'ai vu aucune mention de guillemets simples ou doubles.
Je préfère les guillemets simples parce que c'est une seule touche au lieu de deux. Autrement dit, je n'ai pas à écraser la touche Maj pour faire un guillemet simple.
En Perl, vous voulez utiliser des guillemets simples lorsque vous avez une chaîne qui n'a pas besoin d'interpoler des variables ou des caractères d'échappement comme \ n, \ t, \ r, etc.
PHP fait la même distinction que Perl: le contenu entre guillemets simples ne sera pas interprété (même pas \ n sera converti), contrairement aux guillemets doubles qui peuvent contenir des variables pour que leur valeur soit imprimée.
Python ne fonctionne pas, je le crains. Techniquement, il n'y a pas de jeton $ (ou similaire) pour séparer un nom / texte d'une variable en Python. Les deux fonctionnalités rendent Python plus lisible, moins déroutant, après tout. Les guillemets simples et doubles peuvent être utilisés de manière interchangeable en Python.
r
devant la chaîne littérale. Ainsi print 'a\nb'
, vous imprimerez deux lignes, mais print r'a\nb'
vous en imprimerez une.
J'ai choisi d'utiliser des guillemets doubles car ils sont plus faciles à voir.
J'utilise tout ce qui me plaît à l'époque; il est pratique de pouvoir basculer entre les deux à volonté!
Bien sûr, lorsque vous citez des caractères de devis, le basculement entre les deux n'est peut-être pas si fantaisiste après tout ...
Le goût de votre équipe ou les directives de codage de votre projet.
Si vous êtes dans un environnement multilingue, vous souhaiterez peut-être encourager l'utilisation du même type de guillemets pour les chaînes que l'autre langue utilise, par exemple. Sinon, je préfère personnellement le look de '
Je vise à minimiser les pixels et la surprise. Je préfère généralement '
afin de minimiser les pixels, mais "
plutôt si la chaîne a une apostrophe, encore une fois pour minimiser les pixels. Pour un docstring, cependant, je préfère """
plus '''
que ce dernier car non standard, peu commun, et donc surprenant. Si maintenant j'ai un tas de chaînes où j'ai utilisé "
selon la logique ci-dessus, mais aussi une qui peut s'en tirer avec un '
, je peux toujours l'utiliser "
pour préserver la cohérence, seulement pour minimiser la surprise.
Peut-être que cela aide à penser à la philosophie de minimisation des pixels de la manière suivante. Préférez-vous que les caractères anglais ressemblent à A B C
ou AA BB CC
? Ce dernier choix gaspille 50% des pixels non vides.
J'utilise des guillemets doubles parce que je le fais depuis des années dans la plupart des langages (C ++, Java, VB…) sauf Bash, parce que j'utilise également des guillemets doubles dans le texte normal et parce que j'utilise un clavier non anglais (modifié) où les deux caractères nécessitent la touche Maj.
'
= "
/
= \
=\\
exemple :
f = open('c:\word.txt', 'r')
f = open("c:\word.txt", "r")
f = open("c:/word.txt", "r")
f = open("c:\\\word.txt", "r")
Les résultats sont les mêmes
= >> non, ce ne sont pas les mêmes. Une seule barre oblique inversée échappera aux personnages. Vous avez juste de la chance dans cet exemple parce que \k
et \w
ne sont pas des évasions valides comme \t
ou \n
ou \\
ou\"
Si vous souhaitez utiliser des barres obliques inverses simples (et les faire interpréter comme telles), vous devez utiliser une chaîne "brute". Vous pouvez le faire en mettant un ' r
' devant la chaîne
im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'
En ce qui concerne les chemins dans Windows, les barres obliques sont interprétées de la même manière. De toute évidence, la chaîne elle-même est différente. Je ne garantirais pas qu'ils soient gérés de cette façon sur un appareil externe.
os.path.join()