python全局变量在递归函数中不变

2024-04-25 09:35:35 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个flask应用程序,基本上可以方便地编辑json文件。我接收这个json文件,将它交给orderedict,然后允许用户在浏览器中编辑它。由于我使用的编辑器的趣味性,用户一次只能编辑一个“子系统”,因此我有一个递归函数来查找他们编辑的子系统,并在全局变量上更改该子系统。你知道吗

def update_dict_with_edits(main_dict, changed_dict):
    if changed_dict["name"] == main_dict["name"]:
        space_system_dict = changed_dict
        return
    if "sub_systems" not in main_dict:
        return
    for sub_system in main_dict["sub_systems"]:
        update_dict_with_edits(sub_system, changed_dict)

这里称之为:

@app.route('/updatedict', methods=['POST'])
def update_dict():
    if request.method == 'POST':
        changed_json_system = request.form.get('json_data', None)
        changed_dict_system = json.loads(changed_json_system, object_pairs_hook=OrderedDict)
        # the_dict_object.the_json is the global variable I want to edit
        update_dict_with_edits(the_dict_object.the_json, changed_dict_system)

如果我把递归和它正在编辑的子系统的硬代码取出来,它就会工作,比如:

space_system_dict["sub_system"][0] = changed_json_dict

但在当前的设置下不起作用。有什么不正确的地方吗?是不是关于我如何调用递归使得它不再是被操纵的全局变量参数?你知道吗


Tags: 文件the用户json编辑ifobjectmain