2017-07-27 58 views
6

我正在尋找格式化的字節字符串文字。具體而言,相當於Python 3.6+中是否有格式化的字節字符串字面值?

name = "Hello" 
bytes(f"Some format string {name}") 

可能類似於fb"Some format string {name}"

這樣的事情是否存在?

+3

我不這麼認爲。 'bytes'甚至沒有'.format'方法,所以如果他們有f-string等價物,我會感到驚訝。最近你會得到[字節格式](https://docs.python.org/3/library/stdtypes.html#printf-style-bytes-formatting) –

+2

另外,順便說一句,總是標記python問題與通用[python]標籤。如果問題是版本特定的,則使用特定於版本的標記*作爲通用標記的附加*。 –

回答

7

The idea is explicitly dismissed in the PEP

對於我們不支持bytes.format()同樣的原因,你可能 不'b'字符串文字結合'f'。主要問題 是對象的__format__()方法可能會返回與字節字符串不兼容的Unicode數據 。

二進制f字符串首先需要 bytes.format()的解決方案。這個想法過去已經提出,最近 最近在PEP 461。這樣的特徵的討論通常 建議要麼

  • 加入方法如__bformat__()這樣一個目的可以控制它是如何轉化爲字節,或具有bytes.format()

  • 不會像通用或可擴展如str.format()

的這些都保持爲在未來的選擇,如果這樣的功能 是期望的。

+0

太棒了,這正是我想要的。我很難找到一個參考。謝謝! –

-2

這是從python 2到python3的更大變化之一。他們處理unicode和字符串的方式不同。

這是你如何轉換爲字節。

string = "some string format" 
string.encode() 
print(string) 

這是你如何解碼字符串。

string.decode() 

我不得不爲Python 2之間的差的更好的理解與3改變通過此coursera lecture由Charles Severence爲Unicode。您可以觀看整個17分鐘的視頻,或者快速轉發到10:30左右的某個地方,如果您想了解Python 2和Python 3之間的區別以及它們如何處理字符以及特別是unicode。

我明白你的實際問題是你如何格式化一個既有字符串又有字節的字符串。

inBytes = b"testing" 
inString = 'Hello' 
type(inString) #This will yield <class 'str'> 
type(inBytes) #this will yield <class 'bytes'> 

在這裏你可以看到我有一個字符串變量和一個字節變量。

這是如何將一個字節和字符串合併爲一個字符串。

formattedString=(inString + ' ' + inBytes.encode()) 
+6

我很欣賞你的時間和努力,但你的回答與這個問題無關。 – direprobs

+0

我明白了Enrico的問題,特別是他如何在Python 3中轉換字節和字符串,這個區域在新版本中發生了顯着變化。我的答案旨在幫助他理解這種變化是如何發生的以及他如何在Python 3中處理類似的操作。這就是爲什麼我覺得這個迴應與他的問題有關。 – Dom

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/16853347) –