我正在使用一个API,该API返回以\ x04(传输结束)字节终止的消息。我想很好地抓住这个字节。这是我写的代码:

# Only works if buffer size is 1 byte
read = lambda: self._sslsocket.recv(1)

response = b''
for data_buffer in iter(read, b'\x04'):
    response += data_buffer


我想使此解决方案与任意缓冲区大小一起使用。有没有办法在不降低性能的情况下执行此操作,还是我应该在带有recv(1024)的True中使用生成器/经典类?

最佳答案

您可以通过以下两种方式之一对其进行编码:

def read(bufsize):
    return lambda: self._sslsocket.recv(bufsize)


或更简洁地说:

read = lambda bufsize: lambda: self._sslsocket.recv(bufsize)


用法示例:

response = b''
for data_buffer in iter(read(1), b'\x04'):
    response += data_buffer


基本上,这些将本地read()函数变成一个非常专门的装饰器(返回函数的函数)。

关于python - 字节数组上的iter(callable,sentinel)形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53252214/

10-16 03:42