我在函数内有以下代码:
stored_blocks = {}
def replace_blocks(m):
block = m.group(0)
block_hash = sha1(block)
stored_blocks[block_hash] = block
return '{{{%s}}}' % block_hash
num_converted = 0
def convert_variables(m):
name = m.group(1)
num_converted += 1
return '<%%= %s %%>' % name
fixed = MATCH_DECLARE_NEW.sub('', template)
fixed = MATCH_PYTHON_BLOCK.sub(replace_blocks, fixed)
fixed = MATCH_FORMAT.sub(convert_variables, fixed)
添加元素可以stored_blocks
正常工作,但是我不能num_converted
在第二个子功能中增加:
UnboundLocalError:分配前已引用局部变量“ num_converted”
我可以使用,global
但是全局变量很丑陋,我真的根本不需要该变量是全局变量。
因此,我很好奇如何在父函数范围内写入变量。
nonlocal num_converted
可能会完成这项工作,但是我需要一个与Python 2.x兼容的解决方案。
def
不是定义名称空间的唯一关键字:还有class
。