next()如何在这个python代码中工作

时间:2017-04-30 22:50:50

标签: python python-2.7 next

我在这个答案https://stackoverflow.com/a/37401376/1727657中找到了我需要的一些代码。但我不明白next()在此上下文中 。有人可以解释一下吗?

这是我用来理解它的简短测试脚本。我们的想法是查看测试字符串txt是否包含myset中的任何字符串,如果是,则包含哪一个字符串。它有效,但我不知道为什么。

myset = ['one', 'two', 'three']
txt = 'A two dog night'
match = next((x for x in myset if x in txt), False)
if match: #if match is true (meaning something was found)
   print match  #then print what was found
else:
   print "not found" 

我的下一个问题是询问next()是否会给我match的索引(或者我需要find()上的txt)?

1 个答案:

答案 0 :(得分:1)

解释下一步的使用方法。

match = next((x for x in myset if x in txt), False)

这将返回第一个参数中传递的生成器表达式创建的第一个/下一个值(在本例中为匹配的实际单词)。如果生成器表达式为空,则将返回False

编写代码的人可能只对第一场比赛感兴趣,因此使用了next

我们可以使用:

matches = [x for x in myset if x in txt]

并使用len来确定点击次数。

显示next的一些简单用法:

generator = (x for x in myset)
print generator
print next(generator)
print next(generator)
print next(generator)

输出:

<generator object <genexpr> at 0x100720b90>
one
two
three

如果我们在列表/生成器为空时尝试调用StopIteration,上面的示例将触发next异常,因为我们不使用第二个参数来覆盖生成器时应该返回的内容是空的。

next真正在幕后做的是类型的__next__()方法。这对于在上课时保持头脑很重要。

如果有什么不清楚,请不要犹豫,我会详细说明。还要记住,当你不明白发生了什么时,print是你的朋友。