在Python中像f字符串一样使用b''

问题描述 投票:0回答:2

我有这个字符串

s = 'ha\xcc\x81nh'
。我想用作字节,有没有像 f string
b'{s}'
 那样的东西
    

python byte encode
2个回答
2
投票

f'{s}'

如果我们在您的用例中使用此方法,它会像这样。

b = sample_string.encode()



0
投票
https://python-forum.io/thread-28345.html

)。 但是,我确实遇到了很多需要使用 f-string 来表示字节的情况。例如,对于智能家居物联网自动化,我需要将

b = f'{s}'.encode()

发送到戴森风扇,其中

b'\x82\x99\x01\x00\x01\x00"438/E1G-SG-NGA0301A/status/current\x01\x00#438/E1G-SG-NGA0301A/status/software\x01\x00%438/E1G-SG-NGA0301A/status/connection\x01\x00!438/E1G-SG-NGA0301A/status/faults\x01'
是风扇的序列号,已出现4次。
简单字符串可以使用

E1G-SG-NGA0301A

.encode()
.decode()
bytes
之间进行转换。对于上面的字节序列,
str
不起作用,即
.decode()

事实上,这个字节序列不是UTF-8的,
'\x82\x99\x01\x00\x01\x00"438'.encode() == b'\x82\x99\x01\x00\x01\x00"438' False

会报错。所以上面先使用 f-string 然后执行

.decode().encode()
的方法在我的情况下不起作用。

.encode()

函数上也做出了类似的任意且较差的决策。我们必须在 Python3 中使用

range()
,而不是 Python2 中的
list(range(100))
(更快、更简单)。他们没有预见到有时我们需要创建一个范围列表以进行索引排序等的情况,而迭代器在这种情况下不起作用。他们脑子里唯一想到的就是
range(100)
总之,字节的 f 字符串很有用;迭代器版本 

for i in range(100)

和列表版本

range
都很有用。如果Python语言的决策者继续如此固执和以自我为中心,我们将看不到这种语言未来的希望。
    

© www.soinside.com 2019 - 2024. All rights reserved.