[Python] Re: doppio backslash non va

Sandro Dentella sandro a e-den.it
Sab 3 Feb 2007 15:29:52 CET


Dopo la mail di Nicola che mi pareva chiarissima (complimenti Nicola!) non
pensavo di dovere aggiungere nulla... ma visto che il problema rimane provo
a cimentarmi con la risposta...

  1. un amico mi diceva, e ne ho fatto tesoro, che in informatica non si può
     avere una comprensione parziale, del tipo 'capirò meglio questa parte
     dopo intanto cogliamo il senso'. Mi spiego

     a = r'\x'

     non procedere se non capisci cosa sia quella piccola 'r'

     Analogamente per la parola 'proteggere', se non la comprendi non
     capirai cosa significhi che la prima \ serve per proteggere
     l'interpretazione della seconda, ovvero fare in modo che la seconda
     venga interpretata come carattere semplice e non come modificatore del
     modo di interpretare il carattere successivo.

  2. ascii code 92

> >>> chr(92)
> '\\'
> 
> Dalli con due caratteri!
> 
> >>> print chr(92)
> \


     man ascii o se non hai un sistema linux a disposizione quarda qui:
     http://www.pluto.it/files/ildp/man/man7/ascii.7.html, vai al Decimal 92
     e ci trovi:

     134	92	5C	\   '\\'

     Qui python non c'entra eppure ecco tornare il fatto che il carattere
     '\' viene *rappresentato* così '\\'

     quindi a = r'\x'è equivalente ad a = '\\x'
 
     >>>print len(a), ord(a[0]), ord(a[1])
     2 92 120

     mostra senza più dubbio che a è di due caratteri il cui primo è \ ed il
     secondo x (la cui codifica decimale è 120), ma che per "scrivere" \
     servono due caratteri nel modo normale o uno nel modo 'raw' (la r...),
     e siccome ne servono due per chiarezza quando chiedi all'interprete
     cosa c'è in a ti mostra quello che ci devi scrivere.

  Sintesi. Ti disorienta che:
     * per scrivere un carattere ne servan due	
     * che dove ne servan due a volte (modo 'r') ne basti uno
     * che >>> print a     e      >>> a  rappresentino il dato in modod
       differente  

   vuoi scrivere 0f  ->  \xof?
   >>> a = '\\x%s' % '0f'
   >>> print a
   \x0f


   Se hai ancora problemi, fidati che python queste cose le capisce, e
   semmai posta il codice che non funziona...

   sandro
   *;-)

PS: t'è andata bene che non ti stai ciemntando con il tcl, c'è un caso
    celebre che non ricordo dove stia, in cui servono 16 o 32 '\' per ottenere
    quello che si desidera...


Maggiori informazioni sulla lista Python