为什么此方法没有按预期分配变量?

Why isn't this method assigning the variable as expected?

我有一种方法可以从文件中读取并将内容分配给变量。

def recall_data(self, file, d):
    try:
        with open(file) as f:
            d = json.load(f)
            print(d)
    except FileNotFoundError:
        print('No File!')

我调用了方法,知道d的值赋给了文件(一个字典)的内容。但是,代码没有将 d 的值存储在我作为 d.

传递的变量中
self.recall_data(self.file_name, self.data)

这是我的方法调用。 self.data 是一个空字典。我不明白为什么它没有将 self.file_name.

的内容分配给 self.data

您没有传递参数以供参考。

Python:

中 value 的参数段落是这样工作的
var = 'hey'
def foo(arg):
    arg = 'yay'
    print(arg)
foo(var) # 'yay'
print(var) # 'hey'

对于你的情况,你可以这样做:

def recall_data(self, file, d: list): # d is a list with one element
try:
    with open(file) as f:
        d[0] = json.load(f) # This way you are really editing the variable in the global scope
        print(d[0])
except FileNotFoundError:
    print('No File!')

请注意,本例中的 d 参数必须是 list 类型,因此 self.data 也必须是

如果您想了解更多关于此方法的信息,可以阅读this question的答案。


否则你可以这样做:

def recall_data(self, file, d):
try:
    with open(file) as f:
        d = json.load(f)
        print(d)
        return d
except FileNotFoundError:
    print('No File!')

self.data = self.recall_data(self.file_name, self.data) # The returned value will be stored into self.data

请注意,您永远不应该使用我上面建议的第一种方法,它只是为了解决问题而无需更改您的代码。