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

Posted

技术标签:

【中文标题】next() 在这个 python 代码中是如何工作的【英文标题】:How does next() work in this python code 【发布时间】:2017-04-30 22:50:49 【问题描述】:

我在这个答案https://***.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 的索引(或者我是否需要在txt 上做find())?

【问题讨论】:

docs.python.org/3/library/functions.html#next 我猜他们在这里使用next,因为他们只想要第一场比赛。该行可能只是 match = [x for x in myset if x in txt] 以获取所有匹配项。 【参考方案1】:

这里详细解释下如何使用next。

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

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

next 真正在幕后做的事情称为类型的__next__() 方法。上课时要牢记这一点。

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

【讨论】:

以上是关于next() 在这个 python 代码中是如何工作的的主要内容,如果未能解决你的问题,请参考以下文章

有人能解释一下staticmethod的源代码在python中是如何工作的吗

如果在 C++ 中,如何分析

这个二叉树代码在java中是如何工作的?

python中是如何实现将一个函数中定义的变量在另一个函数中改变其值的

javascript生成器

append() 在这个代码片段中是如何工作的?与特定变量混淆[重复]