在函数内取消字典不会保存数据
Unpickling a dictionary inside a function wont save the data
我正在使用 python 3.6 制作一个 "saving profile" 小脚本,其中字典是要保存的配置文件。它有两个功能来保存配置文件(字典)和使用 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)
就我个人而言,我会return这样的变量。依赖全局通常不是一个好主意(保存功能也是如此):
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.6 制作一个 "saving profile" 小脚本,其中字典是要保存的配置文件。它有两个功能来保存配置文件(字典)和使用 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)
就我个人而言,我会return这样的变量。依赖全局通常不是一个好主意(保存功能也是如此):
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()