我有一個函數內部下面的代碼:Python的封:寫入變量父範圍
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: local variable 'num_converted' referenced before assignment
我可以使用global
但全局變量是醜陋的,我真的不需要該變量是全球性的。
所以我很好奇我如何寫入父函數範圍內的變量。 nonlocal num_converted
可能會完成這項工作,但我需要一個適用於Python 2.x的解決方案。
與某些流行的觀點相反(通過這類問題來判斷)`def`並不是唯一定義名稱空間的關鍵字:也有'class`。 – 2011-01-31 14:22:41