首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

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

2014-01-22 
请教一下这算是闭包吗,来自cookbook 3.0新手正在学习。cookbook 3.0的2.6节有如下代码,用正则表达式,查找与

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

热点排行