我在函数内有以下代码:
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兼容的解决方案。
问题:
这是因为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
问题内容: 我有两个控制器,一个封装在另一个中。现在,我知道子范围从父范围继承属性,但是有没有办法更新父范围变量?到目前为止,我还没有遇到任何明显的解决方案。 在我的情况下,我在表单中有一个日历控制器。我想从父范围(即表单)更新开始日期和结束日期,以便表单在提交时具有开始日期和结束日期。 问题答案: 您需要在父作用域中使用一个对象(不是原始对象),然后就可以直接从子作用域中更新它 上级: ctrl
问题内容: 如何从其父范围调用在子范围中定义的方法? http://jsfiddle.net/wUPdW/ 问题答案: 您可以从父母到孩子使用: 工作jsfiddle:http : //jsfiddle.net/wUPdW/2/ 更新 :还有另一个版本,耦合性更低,更易于测试: jsfiddle:http : //jsfiddle.net/uypo360u/
问题内容: 我有一个从或指令属性或任何其他属性中获得的字符串,我想基于此在作用域上创建一个变量。所以: 但是,如果字符串包含一个或多个点,我想将其拆分并实际上“向下钻取”到作用域中。所以应该成为。这意味着简单版本不起作用! 在读取基于字符串的变量时,您可以通过做来获得这种行为,但是在分配值时如何实现呢? 问题答案: 我发现的解决方案是使用$ parse。 “将Angular表达式转换为函数。” 如
我有一个考试示例,它询问我是否可以访问包含值1的x变量?解决方案是我可以,但我感兴趣的是具体怎么做?
问题内容: 有没有办法在模块内部设置全局变量?当我尝试以最明显的方式进行操作(如下所示)时,Python解释器说该变量不存在。 并将模块导入其他文件后 追溯是: … UnboundLocalError:赋值之前引用了本地变量’ DBNAME ‘ 问题答案: 这是怎么回事。 首先,Python真正唯一的全局变量是模块范围的变量。您不能创建真正全局变量。您所要做的就是在特定范围内创建变量。(如果您在P
问题内容: 我设法绘制了数据,并想为其添加背景图像(地图)。数据是按长/纬度值绘制的,我也具有图像三个角(左上角,右上角和左下角)的长/纬度值。 我试图弄清楚如何在imshow中使用’extent’选项。但是,我发现的示例并未说明如何为每个角指定x和y(在我的情况下,我具有三个角的信息)。 将图像添加到绘图中时,如何为图像指定三个角的位置? 谢谢 问题答案: 在当前轴的坐标中指定要粘贴图像的矩形的