Il n'y a pas vraiment de " chaîne brute "; il existe des littéraux de chaîne bruts , qui sont exactement les littéraux de chaîne marqués d'un 'r'
avant la citation d'ouverture.
Un "littéral de chaîne brut" est une syntaxe légèrement différente pour un littéral de chaîne, dans laquelle une barre oblique inverse, \
est considérée comme signifiant "juste une barre oblique inverse" (sauf lorsqu'elle vient juste avant une citation qui autrement mettrait fin au littéral) - non "séquences d'échappement" pour représenter les nouvelles lignes, les tabulations, les espaces arrière, les flux de formulaires, etc. Dans les littéraux de chaîne normaux, chaque barre oblique inverse doit être doublée pour éviter d'être considérée comme le début d'une séquence d'échappement.
Cette variante de syntaxe existe principalement parce que la syntaxe des modèles d'expression régulière est lourde de barres obliques inverses (mais jamais à la fin, donc la clause "except" ci-dessus n'a pas d'importance) et elle semble un peu meilleure lorsque vous évitez de doubler chacun d'eux - - c'est tout. Il a également gagné en popularité pour exprimer les chemins de fichiers natifs de Windows (avec des barres obliques inverses au lieu de barres obliques normales comme sur d'autres plates-formes), mais cela est très rarement nécessaire (car les barres obliques normales fonctionnent généralement bien sur Windows aussi) et imparfaites (en raison de la clause "except") au dessus de).
r'...'
est une chaîne d'octets (en Python 2. *), ur'...'
est une chaîne Unicode (encore une fois, en Python 2. *), et l' un des trois autres types de produit citant aussi exactement les mêmes types de cordes (ainsi , par exemple r'...'
, r'''...'''
, r"..."
, r"""..."""
sont toutes des chaînes d'octets, etc.).
Je ne sais pas ce que vous entendez par " revenir en arrière " - il n'y a pas de sens intrinsèque en arrière et en avant, car il n'y a pas de type de chaîne brute , c'est juste une syntaxe alternative pour exprimer des objets de chaîne parfaitement normaux, octets ou unicode tels qu'ils peuvent être.
Et oui, en Python 2. *, u'...'
est bien sûr toujours distinct de juste '...'
- le premier est une chaîne unicode, le dernier est une chaîne d'octets. Dans quel codage le littéral pourrait être exprimé est un problème complètement orthogonal.
Par exemple, considérez (Python 2.6):
>>> sys.getsizeof('ciao')
28
>>> sys.getsizeof(u'ciao')
34
L'objet Unicode prend bien sûr plus d'espace mémoire (très petite différence pour une chaîne très courte, évidemment ;-).