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中是如何工作的吗