Bir python dizesinden önceki ab öneki ne anlama geliyor?


107

Bir python kaynak kodunda, tökezlediğim gibi, bir dizeden önce küçük bir b gördüm :

b"abcdef"

uUnicode dizesini belirten röneki ve ham dize değişmezi için öneki biliyorum .

bTam olarak herhangi bir önek içermeyen düz bir dizge gibi göründüğü için ne anlama gelir ve ne tür bir kaynak kodu yararlıdır?


10
@SLott: Eğer b öneki olduğunu göreceksiniz sağlanan bağlantıyı takip değil 2.6 (referans malzemesi küçük bir hata gibi görünüyor) için ... dize önek izin. Ve bu tür şeyler hakkında googling yapmak kolay değil. "B python string öneki" gibi anahtar kelimeleri denedim ve temelde hiçbir yere varamadım.
kriss

Kullanılan S.Lott bağlantısında bir sürüm belirticisi eksik; bu Python 3 hakkındadır: docs.python.org/3/reference/… . Önek artık Python 2.6'da ve çapraz sürüm Python kodunu kolaylaştırmak için destekleniyor .
Martijn Pieters

1
bu soru ne "tam bir kopya" ne de "Yazılı ifademdeki bu 'b' karakterinden kurtulabilir miyim?" stackoverflow.com/questions/42599851/… marijin'i memnun eden işareti kaldırır mısınız? soran kişinin yanı sıra gerçekten bir cevap vermeye çalışan kişi, sorulan asıl soruya bir yanıt alabilmeyi takdir edebilir.
me_

Yanıtlar:


62

Bu Python3 bytes değişmezidir . Bu önek Python 2.5 ve daha eski sürümlerde yoktur (düz 2.x dizesine eşdeğerdir, düz 3.x dizesi ise u2.x öneki bir değişmez değere eşdeğerdir ). Python 2.6+ sürümünde , 3.x ile uyumluluk için düz bir dizeye eşdeğerdir .


@WRAR: Python 2.6 kodundaydı Bunu gördüm, görünüşe göre python2.6'da tanıtıldı
kriss

Göndermeden önce 2.6 referansında özellikle kontrol ettim: docs.python.org/reference/lexical_analysis.html#literals
wRAR

1
Tamam, "Gelecekteki uyumluluk için Python 2.6, str türünün eşanlamlısı olarak baytları ekler ve ayrıca" Yenilikler "den b '' gösterimini destekler."
wRAR

yukarıdaki bağlantılar artık 2.7 referansı işaret ettiği ve b öneki eklendiğinden, işte eski sahte referans docs.python.org/release/2.6.8/reference/…
kriss

98

bÖnek bir işaret bytesdize .

Eğer görürseniz ifadesi yaratır, Python 3 kaynak kodu kullanılan bytesnesne değil, normal bir Unicode strnesnesi . Python kabuğunuzda veya bir listenin, diktenin veya diğer konteyner içeriklerinin parçası olarak yankılandığını görürseniz, bytesbu gösterimi kullanarak temsil edilen bir nesne görürsünüz .

bytesnesneler temelde 0-255 aralığında bir tamsayı dizisi içerir, ancak temsil edildiğinde, Python bu baytları içeriklerini okumayı kolaylaştırmak için ASCII kod noktaları olarak görüntüler . Dışında herhangi bir bayt yazdırılabilir ASCII karakter aralığında kaçış dizileri (örn olarak gösterilmiştir \n, \x82vb.) Tersine, bayt değerlerini tanımlamak için hem ASCII karakterlerini hem de kaçış dizilerini kullanabilirsiniz; ASCII değerleri için sayısal değerleri kullanılır (örneğin b'A'== b'\x41')

Bir bytesnesne bir tamsayı dizisinden oluştuğu bytesiçin, 0-255 aralığındaki değerlere sahip diğer herhangi bir tamsayı dizisinden bir liste gibi bir nesne oluşturabilirsiniz:

bytes([72, 101, 108, 108, 111])

ve indeksleme Eğer tamsayılar geri verir (ama dilimleme yeni üretir bytesdeğeri; yukarıdaki örneğin value[0]verir 72, ancak value[:1]bir b'H'72 harf için ASCII kod noktası olarak H ).

byteskodlanmış metin dahil olmak üzere ikili verileri modelleyin . Senin Eğer değer metin içeren gelmez, doğru codec kullanarak, bunun ilk şifresini çözmek gerekir. Veriler UTF-8 olarak kodlandıysa, örneğin aşağıdakilerle bir Unicode değeri elde edebilirsiniz :bytesstr

strvalue = bytesvalue.decode('utf-8')

Tersine, bir strnesnedeki metinden gitmek bytesiçin kodlamanız gerekir . Kullanacağınız bir kodlamaya karar vermelisiniz; varsayılan UTF-8 kullanmaktır, ancak ihtiyacınız olan şey kullanım durumunuza büyük ölçüde bağlıdır:

bytesvalue = strvalue.encode('utf-8')

bytes(strvalue, encoding)Aynısını yapmak için yapıcıyı da kullanabilirsiniz .

Hem kod çözme hem de kodlama yöntemleri, hataların nasıl işleneceğini belirtmek için fazladan bir argüman alır .

Python 2, sürüm 2.6 ve 2.7 b'..', hem Python 2 hem de 3'te çalışan kodu kolaylaştırmak için dize değişmez sözdizimini kullanarak dize değişmezleri oluşturmayı da destekler .

bytesnesneler, tıpkı strdizeler gibi değişmezdir . Değiştirilebilir bir bayt değerine ihtiyacınız varsa bir bytearray()nesne kullanın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.