循环浏览资源,直到满足所有参数

时间:2015-07-27 20:34:14

标签: python

我正在尝试记录一个过程;该过程具有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方式呢?

1 个答案:

答案 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")