读书人

请问一下这算是闭包吗来自cookbook

发布时间: 2014-01-22 00:03:39 作者: rapoo

请教一下这算是闭包吗,来自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...

读书人网 >perl python

热点推荐