'b' karakter bir dize önünde literal nedir?
Görünüşe göre, aşağıdaki geçerli sözdizimi
my_string = b'The string'
Bilmek istiyorum
- String
b
bu karakter karşısında ne anlama geliyor? - Bunu kullanmanın etkileri nelerdir?
- Bunu kullanmak için uygun olduğu durumlar nelerdir.
Buldum bir related question buraya KADAR ama bu soru hakkında PHP olsa ve bu devletler b
belirtmek için kullanılır dize ikili karşıt olarak unicode hangisi için gerekli kod için uyumlu sürüm PHP < 6 zaman Geçirme için PHP 6. Bu Python için geçerli olduğunu sanmıyorum.
Unicode dize olarak belirtmek için aynı sözdizimi u
karakteri kullanarak ilgili python sitesi this documentation buldum. Ne yazık ki söz etmezbher yerde bu belgedeki karakter.
Ayrıca, sadece meraktan soruyorum, b
u
daha fazla semboller vardır başka şeyler?
CEVAP
Python 3.x türleri arasında kesin bir ayrım yapar:
str
='...'
= Unicode karakter dizisi (UTF-16 veya UTF-32, Python derlendi nasıl bağlı olarak) hazırbytes
=b'...'
= sekizli (0 ile 255 arasında bir tamsayı) bir dizi hazır
Eğer Java veya C biliyorsanız#, String
str
byte[]
. bytes
düşün Eğer SQL konusunda bilginiz varsa, NVARCHAR
BINARY
BLOB
bytes
*21 düşünüyoruz. Eğer Windows kayıt aşina iseniz, REG_SZ
REG_BINARY
bytes
*26 düşünüyoruz. Eğer C ile aşina değilseniz, o zaman char
ve dizeleri, çünkü . hakkında öğrendiğin her şeyi unut ^strong>BİR KARAKTER BİR BAYT DEĞİL. Bu fikri uzun zamandır kullanılmıyor.
Metin temsil etmek istediğinizde str
kullanın.
print('שלום עולם')
Yapılar gibi alt düzey ikili veri temsil etmek istediğinizde bytes
kullanın.
NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0]
62 ** bytes
bir nesne için str
.
>>> '\uFEFF'.encode('UTF-8')
b'\xef\xbb\xbf'
Ama özgürce iki tür karıştırabilirsiniz.
>>> b'\xEF\xBB\xBF' 'Text with a UTF-8 BOM'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't concat bytes to str
b'...'
gösterim byte 0x01-0x7F ASCII karakterler yerine hex numaraları ile belirtilmesi verir bu biraz kafa karıştırıcı.
>>> b'A' == b'\x41'
True
Ama vurgulamak gerekirbir karakter bir bayt değil.
>>> 'A' == b'A'
False
Python 2'de.x
Önceden Python 3.0 sürümleri metin ve ikili veri arasındaki ayrım bu tür yoktu. Bunun yerine, vardı:
unicode
=u'...'
= Unicode karakter dizisi = 3 hazır.x 44**str
='...'
= şaşırmış bayt dizileri rakamları/karakterleri- Genellikle metin, bazı belirsiz kodlama kodlanmış.
- Ama aynı zamanda
struct.pack
çıkış gibi ikili veri temsil etmek için kullanılır.
2 kolaylaştırmak için.x-3.x geçiş, b'...'
değişmez sözdizimini ikili dizeleri ayırt izin vermek için 2.6 ve Python için backported oldu bytes
3. (x) metin dizeleri 3. str
(x). b
önek 2'de hiçbir şey yapmaz.x, ama 2to3
komut dosyası Unicode dize dönüştürmek için bildirir 3.x.
Yani Evet, b'...'
Python hazır PHP yaptıkları aynı amacı var.
Ayrıca, sadece meraktan soruyorum, daha fazla semboller b ve u bunu diğer şeyler?
r
önek oluşturur ham dize (örneğin, r'\t'
eğik çizgi t
yerine bir sekme) ve üç çift tırnak '''...'''
ya """..."""
izin çok satırlı dize hazır.
En kolay/en iyi/en doğru Java ' da bir...
Eğer bir dize geçerli bir adres olup o...
Java nasıl bir dize bir karakter dönüş...
Literal C çok satırlı Dize#...
Nasıl sınırlayıcı olarak herhangi bir ...