Non c'è davvero nessuna " stringa grezza "; ci sono letterali stringa grezzi , che sono esattamente i letterali stringa contrassegnati da un 'r'
prima della citazione di apertura.
Una "stringa letterale non elaborata" è una sintassi leggermente diversa per una stringa letterale, in cui una barra rovesciata, \
viene considerata come "solo una barra rovesciata" (tranne quando si trova proprio prima di una citazione che altrimenti terminerebbe la lettera) - no "escape sequences" per rappresentare newline, tab, backspaces, form feed e così via. Nei normali valori letterali di stringa, ogni barra rovesciata deve essere raddoppiata per evitare di essere presa come inizio di una sequenza di escape.
Questa variante di sintassi esiste principalmente perché la sintassi dei modelli di espressioni regolari è pesante con barre rovesciate (ma mai alla fine, quindi la clausola "tranne" sopra non ha importanza) e sembra un po 'meglio quando eviti di raddoppiare ognuna di esse - - È tutto. Ha anche guadagnato un po 'di popolarità per esprimere i percorsi dei file nativi di Windows (con barre rovesciate anziché normali barre come su altre piattaforme), ma ciò è molto raramente necessario (poiché le barre normali funzionano principalmente anche su Windows) e imperfetto (a causa della clausola "tranne" sopra).
r'...'
è una stringa di byte (in Python 2. *), ur'...'
è una stringa Unicode (di nuovo, in Python 2. *), e qualsiasi degli altri tre tipi di citare produce esattamente gli stessi tipi di stringhe (così per esempio r'...'
, r'''...'''
, r"..."
, r"""..."""
sono tutte stringhe di byte e così via).
Non sono sicuro di cosa intendi per "tornare indietro ": non esistono direzioni intrinsecamente avanti e indietro, poiché non esiste un tipo di stringa non elaborato , è solo una sintassi alternativa per esprimere oggetti stringa, byte o unicode perfettamente normali come potrebbero essere.
E sì, in Python 2. *, ovviamente , u'...'
è sempre distinto dal solo '...'
: il primo è una stringa unicode, il secondo è una stringa di byte. Ciò che codifica il letterale potrebbe essere espresso in una questione completamente ortogonale.
Ad esempio, considera (Python 2.6):
>>> sys.getsizeof('ciao')
28
>>> sys.getsizeof(u'ciao')
34
L'oggetto Unicode ovviamente occupa più spazio di memoria (una differenza molto piccola per una stringa molto corta, ovviamente ;-).