python3我如何';宣布';空的'bytes'变量
在Python3中如何“声明”一个空的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
字节变量
我尝试接收字节块,然后将其更改为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
>>>