【发布时间】:2017-11-15 12:34:45
【问题描述】:
使用以下 lambda 映射字节类型
unpack = lambda val: struct.unpack("!b", val)[0]
list(map(unpack, b'\xb1\xbb\n\x0f'))
给出错误
TypeError: a bytes-like object is required, not 'int'
由于字节对象是整数序列(类似于元组),对于字节对象 b,b[0] 将是一个整数,而 b[0:1] 将是一个长度为 1 的字节对象。(这与文本字符串形成对比,其中索引和切片都会产生长度为 1) 的字符串
这解释了为什么传递一个 int。因此,如果我手动遍历字节对象,我可以使用 [x:x+1] 而不是 [x] 访问元素。
我现在的问题是,是否有办法让 map 产生长度为 1 的字节对象,以便 unpack 函数得到它所期望的。
我发现这行得通
unpack = lambda val: struct.unpack("!b", bytes(bytearray([val])))[0]
但这对我来说似乎是一个丑陋的解决方法。有没有更好、更简洁的方法?
【问题讨论】:
标签: python python-3.x lambda