2014-07-08 13 views
6

Sono abbastanza nuovo per Python e apprezzo che sia un linguaggio dinamico. Circa 30 minuti nel mio primo codice python, ho scoperto che il tipo bytes si comporta un po 'strano (a dir poco):Perché è type (bytes())

a = bytes() 
print type(a) 
// prints: <type 'str'> 

Prova qui: http://ideone.com/NqbcHk

Ora, il docs dicono strings e bytes si comportano in modo molto simile con l'eccezione di .format e .encode ma non mi aspettavo che fossero dello stesso tipo. Quello che voglio assicurare è che riesco a lavorare con i byte reali nel mio codice e che non si verifica alcuna coercizione/codifica/decodifica.

Quindi cosa sta succedendo qui?

+0

In Python 3, i byte sono byte, non str. Stai controllando la versione sbagliata :) – aIKid

+0

Grazie ragazzi - Sono imbarazzato. Dovresti prendere un caffè prima di andare avanti :-) –

risposta

10

Il tipo bytes è nuovo in Python 3.x. In Python 2.x, come shim di compatibilità, bytes è un semplice alias per str.

Ulteriori informazioni su questo qui: https://docs.python.org/2/whatsnew/2.6.html#pep-3112-byte-literals

Python 3.0 adotta Unicode come il linguaggio fondamentale di tipo stringa e denota letterali 8-bit in modo diverso, sia come b'string' o utilizzando un costruttore byte. Per compatibilità futura, Python 2.6 aggiunge byte come un sinonimo per il tipo str, e supporta anche la notazione b''.

Il 2.6 str differisce dal tipo di byte 3.0 in vari modi; più in particolare, il costruttore è completamente diverso. In 3.0, bytes([65, 66, 67]) è lungo 3 elementi, contenente i byte che rappresentano ABC; in 2.6, bytes([65, 66, 67]) restituisce la stringa di 12 byte che rappresenta lo str() dell'elenco.

L'utilizzo primario di byte in 2.6 sarà la scrittura di test del tipo di oggetto come isinstance(x, bytes). Ciò aiuterà il convertitore 2to3, che non è in grado di stabilire se il codice 2.x prevede che le stringhe contengano i caratteri o byte a 8 bit; ora puoi usare sia byte che str per rappresentare la tua intenzione esattamente, e il codice risultante sarà anche corretto in Python 3.0.

8

Stai guardando i documenti Python 3. In Python 2, bytes è un alias per str, aggiunto per semplificare la scrittura di codice compatibile in avanti (Python 2 str è una stringa di byte, mentre in Python 3 str è chiamato unicode in Python 2).

Per ulteriori dettagli, vedere What’s New In Python 3.0.

Problemi correlati