我使用yield创建一个生成器,它返回通过正则表达式和re.sub()提取的字符串块。虽然我找到了一种可行的方法,但我有点困惑为什么它可以这样工作而另一种方式不行,如下所示:
这个方法行不通(processchunk()没有将结果分配给在splitmsg中声明的chunk):
这是有效的(请注意唯一的区别是chunk现在是一个块列表):
我的问题基本上是为什么似乎块/块变量的作用域取决于它是普通变量还是列表?
这个方法行不通(processchunk()没有将结果分配给在splitmsg中声明的chunk):
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
这是有效的(请注意唯一的区别是chunk现在是一个块列表):
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
我的问题基本上是为什么似乎块/块变量的作用域取决于它是普通变量还是列表?