我的脚本运行C程序digitemp。输出包含传感器ID和温度的行。我需要将传感器ID与特定名称匹配,从而将所有elifs匹配。我在这个例子中使用了第一个,第二个第三个作为ID的数学名称。有没有办法减少所有elif语句,因为还有更多要添加的内容?
import os
# get digitemps output
cmd = "/bin/digitemp_ -c /bin/digitemp.conf -q -a"
def digitemps():
for outline in os.popen(cmd).readlines():
outline = outline[:-1].split()
if outline[0] == '28F4F525030000D1':
temp_ = outline[1]
print 'first ' + temp_
elif outline[0] == '28622A260300006B':
temp_ = outline[1]
print 'second ' + temp_
elif outline[0] == '28622A2603000080':
temp_ = outline[1]
print 'third ' + temp_
digitemps()
答案 0 :(得分:4)
使用字典从传感器ID映射到人类可读的名称:
id_to_name = {"28F4F525030000D1": "first",
"28622A260300006B": "second",
"28622A2603000080", "third"}
print id_to_name.get(outline[0], outline[0]) + outline[1]
这种方法的优点是,如果没有为其分配人类可读的名称,get
方法将返回ID而不做任何更改。
答案 1 :(得分:0)
循环中的大多数逻辑都可以使用生成器表达式编写,这是代码是等效的,并在评论中考虑了@ DSM的建议:
d = {'28F4F525030000D1':'first ',
'28622A260300006B':'second ',
'28622A2603000080':'third '}
def digitemps():
for s in (d.get(x[0],x[0]) + x[1] for x in (e.split() for e in os.popen(cmd))):
print s
答案 2 :(得分:-2)
不幸的是,Python无法这样做。如果您使用的是C ++,那么您可以使用switch语句,但Python没有这样的平等。遗憾!