Dalam kode sumber python saya menemukan saya telah melihat b kecil sebelum string seperti di:
b"abcdef"
Saya tahu tentang u
awalan yang menandakan string unicode, dan r
awalan untuk string mentah literal.
Apa b
kepanjangannya dan jenis kode sumber apa yang berguna karena tampaknya persis seperti string biasa tanpa awalan apa pun?
python
syntax
python-3.x
byte
kriss
sumber
sumber
Jawaban:
Ini adalah
bytes
literal Python3 . Awalan ini tidak ada di Python 2.5 dan yang lebih lama (ini setara dengan string biasa 2.x, sedangkan string biasa 3.x setara dengan literal denganu
awalan di 2.x). Python 2.6+ itu adalah setara dengan string biasa, untuk kompatibilitas dengan 3.x .sumber
The
b
prefix menandakanbytes
literal string yang .Jika Anda melihatnya digunakan dalam kode sumber Python 3, ekspresi tersebut membuat
bytes
objek , bukan objek Unicodestr
biasa . Jika Anda melihatnya bergema di shell Python Anda atau sebagai bagian dari daftar, dict, atau konten container lainnya, Anda akan melihatbytes
objek yang diwakili menggunakan notasi ini.bytes
objek pada dasarnya berisi urutan bilangan bulat dalam kisaran 0-255, tetapi ketika diwakili, Python menampilkan byte ini sebagai titik kode ASCII untuk mempermudah membaca kontennya. Setiap byte di luar dicetak berbagai karakter ASCII ditampilkan sebagai escape sequence (misalnya\n
,\x82
, dll). Sebaliknya, Anda dapat menggunakan karakter ASCII dan escape sequence untuk menentukan nilai byte; untuk nilai ASCII, nilai numeriknya digunakan (misalnyab'A'
==b'\x41'
)Karena
bytes
objek terdiri dari urutan bilangan bulat, Anda dapat membuatbytes
objek dari urutan bilangan bulat lainnya dengan nilai dalam rentang 0-255, seperti daftar:dan pengindeksan memberi Anda kembali bilangan bulat (tetapi mengiris menghasilkan
bytes
nilai, karena contoh di atas,value[0]
memberi Anda72
, tetapivalue[:1]
adalahb'H'
sebagai 72 adalah titik kode ASCII untuk huruf H ).bytes
model data biner , termasuk teks yang disandikan . Jikabytes
nilai Anda memang berisi teks, Anda harus mendekodekannya terlebih dahulu, menggunakan codec yang benar. Jika data dienkode sebagai UTF-8, misalnya, Anda dapat memperolehstr
nilai Unicode dengan:Sebaliknya, beralih dari teks dalam a
str
objek kebytes
Anda perlu melakukan encode . Anda perlu memutuskan encoding yang akan digunakan; defaultnya adalah menggunakan UTF-8, tetapi yang Anda perlukan sangat bergantung pada kasus penggunaan Anda:Anda juga dapat menggunakan konstruktor,
bytes(strvalue, encoding)
untuk melakukan hal yang sama.Baik metode decoding dan encoding membutuhkan argumen tambahan untuk menentukan bagaimana error harus ditangani .
Python 2, versi 2.6 dan 2.7 juga mendukung pembuatan literal
b'..'
string menggunakan sintaks literal string, untuk memudahkan kode yang berfungsi pada Python 2 dan 3.bytes
objek tidak dapat diubah, sepertistr
string. Gunakanbytearray()
objek jika Anda perlu memiliki nilai byte yang bisa berubah.sumber