请教一下这算是闭包吗,来自cookbook 3.0
新手正在学习。
cookbook 3.0的2.6节有如下代码,用正则表达式,查找与替换之后,恢复原来的大小写:
def matchcase(word):
def replace(m):
text = m.group()
if text.isupper():
return word.upper()
elif text.islower():
return word.lower()
elif text[0].isupper():
return word.capitalize()
else:
return word
return replace
text = 'UPPER PYTHON, lower python, Mixed Python'
>>> re.sub('python', matchcase('snake'), text, flags=re.IGNORECASE)
'UPPER SNAKE, lower snake, Mixed Snake'
其中,replace(m)的参数,没有见到传递。似乎象是闭包。但是闭包的话,难道不应该这样应用吗,调用方式也不对啊,直接用到matchcase('snake'),也不会传递给m
请明白的老师讲一下,谢谢。
[解决办法]
re.sub第二个参数可以是字串,也可以是个函数,你这个例子是属于后者,所以re.sub内部执行一旦发现匹配,便会自行调用replace...