将二维处理的for循环转换为带join的嵌套推导式
将二维处理的for循环转换为带join的嵌套推导式
当然没问题!咱们可以把这段代码改成只用一个return语句的嵌套推导式写法,完全去掉那个累加用的lines变量,逻辑还和原来完全一致。
修改后的函数长这样:
def c_array_body_from_bytes(input_bytes): """Emit the provided bytes as the body of a C array.""" return "\n".join( "".join(f"0x{b:02x}, " for b in input_bytes[i:i+12]) for i in range(0, len(input_bytes), 12) ) + "\n"
简单解释下这个写法:
- 内层的生成器表达式
(f"0x{b:02x}, " for b in input_bytes[i:i+12])会把每一组12个字节转换成C风格的十六进制字符串,再用"".join()把它们拼接成一行的内容。 - 外层的生成器表达式会遍历所有分组的起始索引,把每一行的内容收集起来,接着用
"\n".join()把所有行连接成一个完整的字符串。 - 最后加的
+ "\n"是为了和原代码的输出保持一致——原循环里每处理一行都会加换行,所以最后一行末尾也会有个换行,这个写法刚好复刻了这个行为。
你可以测试一下调用print(c_array_body_from_bytes(range(64))),输出结果和原来的代码完全相同哦。
备注:内容来源于stack exchange,提问作者Charles Nicholson
相关产品推荐
相关产品推荐

