Python:嵌套函数外部作用域中的引用变量(非全局)

您所在的位置:网站首页 python如何查看变量在内存中的地址信息 Python:嵌套函数外部作用域中的引用变量(非全局)

Python:嵌套函数外部作用域中的引用变量(非全局)

2023-03-01 20:06| 来源: 网络整理| 查看: 265

我试图递归一棵树并跟踪遍历的路径,直到找到我正在寻找的元素.但是,我遇到两个问题:

虽然我当前的代码返回正确的解决方案,但它有点hacky.我必须推送正在遍历的当前路径final_path,然后返回final_path[0].如果我只是尝试设置final_path = path,在final_path外部范围中定义的位置,它不起作用.如何引用嵌套函数的外部范围?

如果值不在树中,我最终会以预先订购的方式遍历整个树.有没有办法构造代码,以便我可以说"如果,在遍历结束时,我们没有找到目标元素,那么只返回[]而不是完整路径".我意识到我可以循环检查每个元素,但这似乎非常多余.

码:

lftlft = {'val': 3, 'left': None, 'right': {'val': 100, 'left': None, 'right': None}} rtrt = {'val': 5, 'left': None, 'right': None} lft = {'val': 2, 'left': lftlft, 'right': {'val': 99, 'left': None, 'right': None}} rt = {'val': 4, 'left': None, 'right': rtrt} T = {'val': 1,'left': lft, 'right': rt} def get_path(root, data, path): final_path = [] def pre_order(tree, path): if tree is None: return path.append(tree['val']) if tree['val'] == data: final_path.append(path) return True return pre_order(tree['left'], path[:]) or pre_order(tree['right'], path[:]) pre_order(root, []) print('finalpath', final_path) return final_path[0] get_path(T, 99, [])

jsbueno.. 6

在Python 3.x中,您只需使用关键字nonlocal.

你可以在你使用的地方使用它global:在内部函数的开头:

def get_path(root, data, path): final_path = ... def pre_order(tree, path): nonlocal final_path ... ... return final_path

即使在Python 2.x中,仅引用变量也会自动授予您对变量的读访问权限 - 但绝不会写入访问权限.请注意,如果引用的对象是可变对象(如列表或字典),则可以在内部函数内进一步修改它.

通过nonlocal在Python 3.0中引入关键字,您可以对外部函数作用域中定义的变量具有完全写入权限.]

将内部函数写入外部作用域列表中的固定元素的hack可能是在Python 2.x中解决它的最佳方法.

1> jsbueno..:

在Python 3.x中,您只需使用关键字nonlocal.

你可以在你使用的地方使用它global:在内部函数的开头:

def get_path(root, data, path): final_path = ... def pre_order(tree, path): nonlocal final_path ... ... return final_path

即使在Python 2.x中,仅引用变量也会自动授予您对变量的读访问权限 - 但绝不会写入访问权限.请注意,如果引用的对象是可变对象(如列表或字典),则可以在内部函数内进一步修改它.

通过nonlocal在Python 3.0中引入关键字,您可以对外部函数作用域中定义的变量具有完全写入权限.]

将内部函数写入外部作用域列表中的固定元素的hack可能是在Python 2.x中解决它的最佳方法.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3