我正在尝试记录一个过程;该过程具有3种状态,并且它们是顺序的,因此A-> B-> C;它们只能按照这个顺序发生。
我必须遵循这个过程的唯一方法是通过一个函数,它返回分析的特定类型的当前状态,传递给函数。从函数返回数据(它是一个列表),看起来像这样:
[typeX, date, time, process running]
compound, 12/12/14, 10:20, A
我需要确定一个特定的类型,从A到B然后是C.我在化学分析应用程序中使用它,它解析来自机器的结果。除了使用机器提供的API之外我什么也做不了;而这个功能就是其中之一。您可以随时运行它;它将始终返回有关特定类型的信息。
我的方法:
running = True
while running:
return_value = myfunction(type)
if A in return_value[3]:
valueA = True
print "found A"
if B in return_value[3]:
valueB = True
print "found B"
if C in return_value[3]:
valueC = True
print "found C"
if valueA and valueB and ValueC:
running = False
print "Done"
这样可行,但IMO看起来不是很优雅;因为每次运行该函数时,它都会再次验证所有if条件,即使我已经找到了其中的一个或两个。对我的例子来说并不是一个大问题,但是我必须在一个处理数千个条目的过程中运行它,所以从长远来看,性能可能是一个问题。此外,如果我调用该函数并返回相同的值,我会一遍又一遍地打印该值:
found A
found A
[value change]
found B
found B
found B
[value change]
found C
Done
很确定有更好的方法;如果我在while循环中进行睡眠,我可能会松开状态B,并且只获得A和C,如果我经常这样做,我会在屏幕上打印永久打印,打印相同的字符串,因为该值没有不要改变。
最终结果应该是每种类型一次打印;通过这种方式,我得不到长输出。什么是一个好的pythonic方式呢?
答案 0 :(得分:0)
很少有想法浮现在脑海中。
“每种类型一次打印”的最简单方法就是为if
语句中的每个值添加一个检查(前提是你将它们设置为False
某处)
if A in return_value[3] and not valueA:
您可以将其简化为:
a_found = b_found = c_found = False
while not (a_found and b_found and c_found):
return_value = myfunction(type)
if A in return_value[3] and not a_found:
a_found = True
print("found A")
[...]
print("Done")