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~
IT技術文章:EY*研究院
iT邦幫忙:eyelash*睫毛
Blog:睫毛*Relax
Facebook:睫毛*Relax