Python Regex,在定义变量之前调用它吗?

时间:2018-09-11 22:04:12

标签: python regex

我对这段代码的实际工作方式感到困惑:

print([m.start() for m in re.finditer('p', word)])

如果我只运行print语句而没有for循环,但保留所有其他内容,则m未被定义。在调用for方法之后如何运行m.start()循环,并在for循环中创建变量?如果有人可以分解这段代码并解释实际发生的事情,我将非常感激。

1 个答案:

答案 0 :(得分:1)

这里是相同的代码,没有使用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()返回的可迭代项中m的每个项re.finditer('p', word)返回的值”。在阅读之前,请不要担心我们使用m的事实-这只是Python的语法受自然语言启发,而不是面向操作的。

[m.start() for m in re.finditer('p', word)]迭代我们定义的生成器,将值放入列表中。一个常见的错误是假设我们可以将生成器视为一个列表-无法对其进行索引,并且只能对其进行一次迭代。

希望有帮助!