在函数内取消字典不会保存数据

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()