字节数组上的iter(callable,sentinel)形式

时间:2018-11-11 19:09:33

标签: python iterator generator callable

我正在使用一个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中使用生成器/经典类?

1 个答案:

答案 0 :(得分:0)

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

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()函数转换为非常专门的装饰器(返回函数的函数)。