Python字典调用函数未更新,能否让程序修改源代码求助
帮你理清这两个Python字典的问题~
首先得明确两个核心点:为什么调用函数后你看不到代码里的变化,以及到底该怎么持久化你的字典数据。
一、为什么调用函数后,代码里的字典没变化?
你得先搞懂Python代码运行的逻辑:
- 当你运行程序时,
my_dict = {'a': [(1,2,3), (4,5,6)]}这行代码会把这个初始字典加载到电脑的内存里,你后续调用adding_new()修改的是内存里的字典副本,而不是你写在.py文件里的静态源代码。 - 你打开代码文件看到的始终是初始状态,是因为源代码是静态的文本,程序不会自动把内存中修改后的内容写回源代码文件里——这是正常现象,所有编程语言基本都是这样的。
怎么验证字典确实被修改了?你可以在调用函数后打印字典看看:
my_dict = {'a': [(1,2,3), (4,5,6)]} def adding_new(): my_dict['new_key'] = [(7,8,9)] # 调用函数修改字典 adding_new() # 打印内存里的字典 print(my_dict)
运行这段代码,控制台会输出:{'a': [(1, 2, 3), (4, 5, 6)], 'new_key': [(7, 8, 9)]},这说明内存里的字典已经更新了,只是源代码文件没被改动而已。
二、有没有办法让程序修改现有代码?
首先:非常不推荐这么做!
直接修改源代码是一种风险极高的操作——万一程序写错了内容,下次运行代码直接就会报错,而且这种方式完全不符合常规的编程逻辑。
正确的做法:把数据持久化到外部文件
如果你的需求是让字典修改后的数据,在下次运行程序时还能用上,应该把字典保存到外部文件里,比如JSON文件(最常用的方式)、文本文件或者Pickle文件。
举个简单的JSON保存/读取例子:
1. 保存修改后的字典
import json # 初始字典 my_dict = {'a': [(1,2,3), (4,5,6)]} def adding_new(): my_dict['new_key'] = [(7,8,9)] # 修改字典 adding_new() # 把字典保存到data.json文件里 with open('data.json', 'w') as f: json.dump(my_dict, f)
2. 下次运行时读取保存的数据
import json try: # 优先读取之前保存的字典 with open('data.json', 'r') as f: my_dict = json.load(f) except FileNotFoundError: # 如果文件不存在,就用初始字典 my_dict = {'a': [(1,2,3), (4,5,6)]} print(my_dict) # 这里会输出上次保存的更新后字典
如果你非要修改源代码(再次提醒:不建议)
可以通过文件操作来改写.py文件里的字典定义,但这种方式只适合非常简单的场景,而且很容易出错。比如你可以读取代码文件的内容,替换掉字典的行,再写回去——但一旦字典结构变复杂,这种方法基本就失效了,所以真的不推荐这么干。
内容的提问来源于stack exchange,提问作者Omer Efron
相关产品推荐
相关产品推荐

