SORU
7 HAZİRAN 2011, Salı


'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

  1. String b bu karakter karşısında ne anlama geliyor?
  2. Bunu kullanmanın etkileri nelerdir?
  3. 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
8 HAZİRAN 2011, ÇARŞAMBA


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ır
  • bytes = 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007
  • HTC

    HTC

    12 Ocak 2006
  • Paul Schroder

    Paul Schrode

    30 Kasım 2007