如何提升Python for循环迭代效率?0x前缀值变量替换及数据类型疑问
问题解答
1. 0x开头写法的类型说明
0x是Python中十六进制整数的字面量标识,属于*整数(int)*类型,和十进制整数完全等价:
0x0= 十进制的00x1= 十进制的10x2= 十进制的2
代码中[0x0]就是装了整数0的列表,和[0]效果没有任何区别,不需要额外拼接“0x”字符。你之前写[0xi]报错是因为这不是合法的Python语法,Python不会把i的数值自动替换到0x后面,这是语法层面不支持的写法。
2. 循环优化方案
你原有代码的重复逻辑完全可以通过嵌套一层小循环实现,不需要做任何字符串拼接、变量嵌套操作,直接用循环的整数值即可,优化后代码如下:
import time # 原有外层循环不变 for i in range(0, 296, 1): time.sleep(5) # 嵌套循环实现0、1、2的遍历,替换重复代码 for j in range(3): print(" ") bus.write_i2c_block_data(0x2C, 0x03, [j]) bus.write_i2c_block_data(0x2C, 0x01, [j]) data = bus.read_byte_data(0x2C, 0x01) res_1 = (data / 256.0 ) * 10.0 data = bus.read_byte_data(0x2C, 0x03) res_2 = (data / 256.0 ) * 10.0 # 如果你用的是Python3,需要把print改成带括号的写法: # print(f"Resistance Channel-0 : %.2f K" % res_1) # print(f"Resistance Channel-1 : %.2f K" % res_2) print "Resistance Channel-0 : %.2f K" % res_1 print "Resistance Channel-1 : %.2f K" % res_2
优化说明
- 执行效率和原有代码完全一致,没有额外性能损耗,同时消除了代码冗余,后续需要调整通信逻辑只需要修改一次即可
- 你之前尝试的字符串拼接、%嵌套变量的方案都是冗余操作,本质上你需要的只是0、1、2三个整数值,直接遍历整数即可,不需要和“0x”字符做任何拼接
内容的提问来源于stack exchange,提问作者Arianne
相关产品推荐
相关产品推荐

