字节数组上的iter(可调用,sentinel)形式



我使用的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

我想让这个解决方案与arbitrary缓冲区大小一起工作。有没有一种方法可以在不影响性能的情况下做到这一点,或者我应该在recv(1024(为True时使用generator/classic?

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

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()函数变成一个非常专业的装饰器(返回函数的函数(。

相关内容

  • 没有找到相关文章

最新更新