本文介绍了需要帮助理解Python闭包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这个代码:
import re
def doReplace(toReplace):
i = 1
def chapterReplacer(_):
result = 'Chapter %i' % i
i += 1
return result
return re.sub('Chapter [a-zA-Z]+', chapterReplacer, test)
test = 'Chapter one Chapter Two Chapter three'
print doReplace(test)
当我运行它,我得到以下错误:
when I run it, I get the following error:
Traceback (most recent call last):
File "C:/Python26/replace.py", line 13, in <module>
print doReplace(test)
File "C:/Python26/replace.py", line 10, in doReplace
return re.sub('Chapter [a-zA-Z]+', chapterReplacer, test)
File "C:\Python26\lib\re.py", line 151, in sub
return _compile(pattern, 0).sub(repl, string, count)
File "C:/Python26/replace.py", line 6, in chapterReplacer
result = 'Chapter %i' % i
UnboundLocalError: local variable 'i' referenced before assignment
我的印象是chapterReplacer会捕获局部变量i,
I was under the impression that chapterReplacer would capture the local variable i, but that doesn't seem to be happening?
推荐答案
您可以使 i
函数属性
def doReplace(toReplace):
chapterReplacer.i = 1
def chapterReplacer(_):
result = 'Chapter %i' % chapterReplacer.i
chapterReplacer.i += 1
return result
return re.sub('Chapter [a-zA-Z]+', chapterReplacer, test)
编辑:从python 3开始,可以使用 nonlocal
a la @MartijnPieters的解决方案。
As of python 3, you can use nonlocal
a la @MartijnPieters 's solution.
这篇关于需要帮助理解Python闭包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!