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

How does next() work in this python code

我在这个答案中找到了一些我需要的代码 。但我不明白 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 的索引(或者我需要在 txt 上做 find())?

在这里详细说明next的使用方法

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

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

写代码的人可能只对第一个匹配感兴趣,所以使用了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

如果我们尝试在 list/generator 为空时调用 next,上面的示例将触发 StopIteration 异常,因为我们没有使用第二个参数来覆盖应该是什么return当生成器为空时编辑。

next 真正在幕后做的事情称为类型的 __next__() 方法。在制作 类.

时要记住这一点很重要

有什么不明白的,欢迎大家指正,我会细说的。还要记住,当你不明白发生了什么事时,print 是你的朋友。