我对这段代码的实际工作原理感到困惑:
print([m.start() for m in re.finditer('p', word)])
如果我只运行print
语句而不运行for
循环,而不运行其他所有语句,那么就没有定义m。如何在调用m.start()
方法后运行for
循环,并在for
循环中创建变量?如果有人能分解一下这段代码并解释一下实际发生了什么,我将不胜感激。
发布于 2018-09-12 07:01:04
下面是相同的代码,没有使用generator expression (即一行for循环)
result_list = []
for m in re.finditer('p', word):
result_list.append(m.start())
print(result_list)
这很简单,所以让我们来看看我们是如何在你的代码片段中表示它的。
re.finditer('p', word)
返回一个我们要循环遍历的迭代值。
m.start() for m in re.finditer('p', word)
是生成器表达式。可以将其看作是“m.start()
为re.finditer('p', word)
返回的迭代量中的每一项m
返回的值”。在阅读之前,不要着迷于我们使用m
的事实--这只是Python的语法是自然语言的启发,而不是面向操作的。
[m.start() for m in re.finditer('p', word)]
迭代我们定义的生成器,将值放入一个列表中。一个常见的错误是假设我们可以将生成器视为一个列表-它不能被索引,只能迭代一次。
希望这能有所帮助!
https://stackoverflow.com/questions/52284786
复制相似问题