我正在使用 yield 创建一个生成器,该生成器返回使用正则表达式和 re.sub() 提取的字符串块。虽然我找到了一种可行的方法,但我对为什么它以一种方式而不是另一种方式工作感到有些困惑,如下所示:
这不起作用(processchunk() 没有分配给 splitmsg 中声明的块):
def splitmsg(msg):
chunk = None
def processchunk(match):
chunk = match.group(1)
return ""
while True:
chunk = None
msg = re.sub(reCHUNK,processchunk,msg,1)
if chunk:
yield chunk
else:
break
这确实有效(注意唯一的区别是块现在是一个列表块):
def splitmsg(msg):
chunks = [ None, ]
def processchunk(match):
chunks[0] = match.group(1)
return ""
while True:
chunks[0] = None
msg = re.sub(reCHUNK,processchunk,msg,1)
if chunks[0]:
yield chunks[0]
else:
break
我的问题基本上是为什么块/块变量的范围似乎取决于它是普通变量还是列表?