Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python全局变量在递归函数中不更改_Python_Json_Recursion_Flask_Global Variables - Fatal编程技术网

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

python全局变量在递归函数中不更改,python,json,recursion,flask,global-variables,Python,Json,Recursion,Flask,Global Variables,因此,我有一个flask应用程序,基本上可以方便地编辑json文件。我接收json文件,将其交给OrderedDict,然后允许用户在浏览器中编辑它。由于我使用的编辑器很有趣,用户一次只能编辑一个“sub_系统”,因此我有一个递归函数来查找他们编辑的子系统,并在全局变量上更改该子系统 def update_dict_with_edits(main_dict, changed_dict): if changed_dict["name"] == main_dict["name"]:

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

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

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

好吧,有很多东西是不正确的,比如你的名字:它们都不匹配。什么是
更改的\u json\u dict
?什么是
d
?难道你不想以某种方式把你的
sub_系统
dict传递给递归吗?哎呀,我改变了我的实际变量名,把它们从主上下文中清除出来,忘记了这两个。现在应该修好了。啊,我刚想出来。我是因为我在改变一个名字,而不是改变一个引用。这里有一个很好的链接,提供了类似问题的信息: