sikuli中list()的奇怪行为

时间:2013-05-17 07:29:39

标签: find behavior sikuli

findAll(Pattern("excel_icon.png").similar(0.9))
nn = getLastMatches()
print "nn -> ",list(nn)
while nn.hasNext():
    print "excel --> ",nn.next()

以上是代码。在这里,我试图在桌面上找到所有MS excel图标,然后 一个接一个地打印。当我运行它时,只有第三行代码的输出在sikuli的消息框中可见,并且它没有打印第5行。 输出: -

nn -> [Match[470,936 53x56 score=0.98 target=center], Match[394,936 53x56 score=0.98 target=center]

但是,当我在第三行中将list(nn)替换为nn

print "nn -> ",nn

我得到的输出是: -

nn -> org.sikuli.script.Finder@4b0431
excel --> Match[470,936 53x56 score=0.98 target=center]
excel --> Match[394,936 53x56 score=0.98 target=center]

我很困惑为什么在第3行使用line()时不打印第5行。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

getLastMatches()返回类Finder的对象,它是迭代器。

以下代码:

print "nn -> ",list(nn)

时迭代 nn
print "nn -> ",nn

不会迭代。

这就是 nn.hasNext()首先执行 list(nn)后返回false的原因。要更好地理解它,请在中运行两次,如下所示:

print "first while"
while exfind.hasNext():
    print "excel --> ",exfind.next()
print "second while"
while exfind.hasNext():
    print "excel --> ",exfind.next()

“第二次”之后不会显示任何内容。