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

时间:2013-05-21 19:53:10

标签: python variables python-3.x byte variable-assignment

如何在Python 3中声明'空bytes变量?

我正在尝试接收块的字节,然后将其更改为utf-8字符串。 但是,我不确定如何声明将保存整个字节序列的初始变量。此变量称为msg。我无法将其声明为None,因为您无法添加bytesNoneType。我不能将它声明为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))

3 个答案:

答案 0 :(得分:44)

只需使用空字节字符串b''

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

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

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

答案 1 :(得分:1)

使用msg = bytes('', encoding = 'your encoding here')

如果您想使用默认编码,只需使用msg = b'',但如果它不在相同的编码中,这将会占用整个缓冲区

答案 2 :(得分:0)

根据文件:

  

块引用   socket.recv(bufsize [,flags])   从套接字接收数据。返回值是字符串,表示收到的数据。   大段引用   所以,我认为msg =“”应该可以正常工作:

>>> msg = ""
>>> msg
''
>>> len(msg)
0
>>>