Python 3如何'声明'一个空的`bytes`变量

tst*_*ers 25 python variables byte variable-assignment python-3.x

如何bytes在Python 3中"声明"一个空变量?

我试图接收块的字节,然后将其更改为utf-8字符串.但是,我不确定如何声明将保存整个字节序列的初始变量.调用此变量msg.我不能声明它None,因为你不能添加一个bytes和一个NoneType.我不能将它声明为unicode字符串,因为那时我将尝试添加bytes到字符串.此外,随着接收程序的发展,它可能会让我陷入一系列仅包含部分字符的字节.我不能没有msg声明,因为msg在转让之前会被引用.以下是有问题的代码

def handleClient(conn, addr):
    print('Connection from:', addr)
    msg = ?
    while 1:
        chunk = conn.recv(1024)
        if not chunk:
            break
        msg = msg + chunk
    msg = str(msg, 'UTF-8')
    conn.close()
    print('Received:', unpack(msg))
Run Code Online (Sandbox Code Playgroud)

Mec*_*ail 49

只需使用空字节串,b''.

但是,重复连接到字符串会涉及多次复制字符串.A bytearray,这是可变的,可能会更快:

msg = bytearray()  # New empty byte array
# Append data to the array
msg.extend(b"blah")
msg.extend(b"foo") 
Run Code Online (Sandbox Code Playgroud)

要将字节数组解码为字符串,请使用msg.decode(encoding='utf-8').

  • 您也可以将收到的块保留在列表中,并在最后加入它们. (4认同)
  • 从快速测试中,1024字节1024字节,在64位Python 3.3.1中,`bytes`占用30.1ns,`bytearray`占29.6ns,`join`占29.9ns. (3认同)