【Python】隨記:印出來常見「b」,但究竟什麼是b呢?

Python 3之後多了一些新功能,其中「b」就是一個。

「b」是指bytes literal,也就是byte格式的字串。當然不只有「b」還有其他種呢!這篇會說明「b」和「u」在字串前的意義。

 

先看個範例:

print(b'eyelash')

這邊會印出:b'eyelash',不覺得奇怪嗎?怎麼前面會有個b呢?b的意義是什麼?

看這個範例可能還是沒有感覺,我們來看看DRF的範例:

from rest_framework.renderers import JSONRenderer
json = JSONRenderer().render({"type": "test", "author": "eyelash"})
print(json)

結果會是:

b'{"type":"test","author":"eyelash"}'

奇怪怎麼字串前面會有個「b」呢?到底是怎麼回事?是不是他們壞掉了?

 

其實這是Python 3表示字串的功能之一,「b」表示「bytes」,表示內容是bytes,而非字串(str)。因為顯示的內容是給人閱讀,我們無法輕易的解讀bytes,因此他們在顯示給人看的時候,用個比較淺顯易懂的方式呈現。

同樣的道理,假設我們要定義一個變數為bytes,也可以在

字串前面加上去就行了。例如:

a = b'test bytes by eyelash'

type(a)

這樣就可以定義好a的內容與格式為:

<class 'bytes'>

是不是很方便又清楚呢!這樣在傳送資料時,可以確認自己傳送的到底是str還是bytes


同場加映

在字串的前面加上「u」,則表示其編碼的方式。「u」的意思是:unicode,它是從python 2就存在的,為了讓這個字串可以有準確的編碼。但在python 3的預設文字編碼方式就是unicode,所以在python 3可以不用特別設定這個,如果不放心還是可加上u

例如:

print(u"eyelash")
print(u"睫毛")

就會變成:

eyelash
睫毛

這時會發現!完全沒有任何感覺 XDDDD

而這時使用type(u"eyelash"),則會看到他的格式為:

<class 'str'>

仍舊是str物件,和b"eyelash"不同喔!


 

~Copyright by Eyelash500~

技術文章:EY*研究院
iT邦幫忙:eyelash*睫毛
Blog:睫毛*Relax
Facebook:睫毛*Relax