Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python3我如何';宣布';空的'bytes'变量_Python_Variables_Python 3.x_Byte_Variable Assignment - Fatal编程技术网

python3我如何';宣布';空的'bytes'变量

python3我如何';宣布';空的'bytes'变量,python,variables,python-3.x,byte,variable-assignment,Python,Variables,Python 3.x,Byte,Variable Assignment,在Python3中如何“声明”一个空的字节变量 我尝试接收字节块,然后将其更改为utf-8字符串。 但是,我不确定如何声明将保存整个字节序列的初始变量。此变量称为msg。我不能将其声明为无,因为您不能添加字节和非类型。我不能将其声明为unicode字符串,因为这样我将尝试向字符串中添加字节。此外,随着接收程序的发展,它可能会让我陷入一个混乱的字节序列中,这些字节只包含字符的一部分。我不能没有msg声明,因为这样msg将在赋值之前被引用。 以下是相关代码 def handleClient(conn

在Python3中如何“声明”一个空的
字节
变量

我尝试接收字节块,然后将其更改为utf-8字符串。 但是,我不确定如何声明将保存整个字节序列的初始变量。此变量称为
msg
。我不能将其声明为
,因为您不能添加
字节
非类型
。我不能将其声明为unicode字符串,因为这样我将尝试向字符串中添加
字节。此外,随着接收程序的发展,它可能会让我陷入一个混乱的字节序列中,这些字节只包含字符的一部分。我不能没有
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))

只需使用一个空字节字符串,
b'

但是,重复连接到字符串需要多次复制该字符串。A是可变的,可能会更快:

msg = bytearray()  # New empty byte array
# Append data to the array
msg.extend(b"blah")
msg.extend(b"foo") 
要将字节数组解码为字符串,请根据文档使用
msg.decode(encoding='utf-8')

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

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


如果要使用默认编码,只需使用
msg=b'
,但如果整个缓冲区不在同一编码中,这将使整个缓冲区成为垃圾

这是初始化,而不是声明。Python没有类型声明。您是说“初始化”还是“实例化”?也许两者都。。。但正如您所说,绝对不是“声明”,您也可以将接收到的块保存在一个列表中,并在最后加入它们。即使程序没有完全I/O绑定在套接字上等待,我也无法想象性能成本在任何地方都会起作用。通过64位Python 3.3.1中的1024块1024字节的快速测试,
bytes
用了30.1ns,
bytearray
用了29.6ns,
join
用了29.9ns。您似乎在引用,但问题是关于Python 3的。Python 2和3之间的行为确实不同。我只是将我的代码从Python2移植到了Python3,以消除与unicode相关的额外代码。然后我遇到了这个差异,这就是我最后问这个问题的原因。。。抱歉,上面没有看到python 3:(
>>> msg = ""
>>> msg
''
>>> len(msg)
0
>>>