python全局变量在递归函数中不更改
因此,我有一个flask应用程序,基本上可以方便地编辑json文件。我接收json文件,将其交给OrderedDict,然后允许用户在浏览器中编辑它。由于我使用的编辑器很有趣,用户一次只能编辑一个“sub_系统”,因此我有一个递归函数来查找他们编辑的子系统,并在全局变量上更改该子系统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"]:
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传递给递归吗?哎呀,我改变了我的实际变量名,把它们从主上下文中清除出来,忘记了这两个。现在应该修好了。啊,我刚想出来。我是因为我在改变一个名字,而不是改变一个引用。这里有一个很好的链接,提供了类似问题的信息: