gpt4 book ai didi

python-3.x - 在函数内取消字典不会保存数据

转载 作者:行者123 更新时间:2023-12-03 10:08:41 26 4
gpt4 key购买 nike

我正在使用 python 3.6 制作一个小的“保存配置文件”脚本,其中字典是要保存的配置文件。它有两个功能来保存配置文件(字典)和使用 pickle 模块加载一个。

import pickle

profile = {'a':1,'b':2,'c':3}
loadedProfile = {}

def saveProfile():

profileName = input("Save profile as ... ")
save = open(profileName + ".pickle","wb")
pickle.dump(profile,save)
save.close()

def loadProfile():

profileName = input("Opem profile ... ")
load = open(profileName + ".pickle","rb")
loadedProfile = pickle.load(load)
load.close()
print(loadedProfile)

saveProfile()
loadProfile()

print(loadedProfile)

输出 :
{'a': 1, 'b': 2, 'c': 3}
{}

请注意,在函数内部,它会将loadedProfile 作为旧字典打印出来,但在函数外部的第二次打印会打印一个空字典。

是什么阻止了字典数据被保存到函数内部的字典中?

谢谢 。

最佳答案

问题是当你这样做时:

loadedProfile = pickle.load(load)

您正在创建一个与全局变量同名的局部变量(退出函数时变量会丢失)。你需要告诉 python 你将重用同名
global loadedProfile
loadedProfile = pickle.load(load)

就个人而言,我会返回这样一个变量。依赖全局变量通常是一个坏主意(保存函数也是如此):
import pickle

profile = {'a':1,'b':2,'c':3}

def saveProfile(p):

profileName = input("Save profile as ... ")
with open(profileName + ".pickle","wb") as save:
pickle.dump(p,save)


def loadProfile():

profileName = input("Opem profile ... ")
with open(profileName + ".pickle","rb") as load:
loadedProfile = pickle.load(load)

return loadedProfile

saveProfile(profile)
new_profile = loadProfile()

关于python-3.x - 在函数内取消字典不会保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49389739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com