gpt4 book ai didi

python - 在 Python 2 中,如何写入父作用域中的变量?

转载 作者:IT老高 更新时间:2023-10-28 21:32:25 26 4
gpt4 key购买 nike

我有一些类似的代码:

def example():
# other logic omitted

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)

# more logic...

将元素添加到 stored_blocks 工作正常,但我无法在第二个嵌套函数中增加 num_converted。我得到一个异常说 UnboundLocalError: local variable 'num_converted' referenced before assignment.

我知道在 3.x 中,我可以尝试 nonlocal num_converted,但是如何解决 2.x 中的问题?我不想为此使用全局变量。

最佳答案

问题:这是因为 Python 的作用域规则是疯狂的。 += 赋值运算符的存在将目标 num_converted 标记为封闭函数作用域的本地,并且 Python 2.x 中没有可靠的方法来仅访问从那里开始的一个范围级别。只有 global 关键字可以将变量引用提升到当前范围之外,并直接将您带到顶部。

修复:num_converted变成单元素数组。

num_converted = [0]
def convert_variables(m):
name = m.group(1)
num_converted[0] += 1
return '<%%= %s %%>' % name

关于python - 在 Python 2 中,如何写入父作用域中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4851463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com