Python 如何保存和分配函数的值';函数更改后是否返回?

Python 如何保存和分配函数的值';函数更改后是否返回?,python,global-variables,Python,Global Variables,我试图将函数的返回值保存为全局变量,以便以后可以使用返回值。但是,由于必须使用函数的多个返回值,因此需要多次更改函数输入。因此,函数的返回也会在过程中发生变化,因此我无法将原始函数的返回保存在全局变量中 例如,从名为“a”的函数中,第一次返回值“x”。然后,我尝试将值“x”保存在一个名为“m”的全局变量中。之后,我更改了函数“A”的输入,以从函数返回另一个值“y”。然而,在此过程中,分配给全局变量“m”的值“x”变为值“y”(因为“m”被分配为等于函数“A”的返回,但不等于值“x”) 在这种情况

我试图将函数的返回值保存为全局变量,以便以后可以使用返回值。但是,由于必须使用函数的多个返回值,因此需要多次更改函数输入。因此,函数的返回也会在过程中发生变化,因此我无法将原始函数的返回保存在全局变量中

例如,从名为“a”的函数中,第一次返回值“x”。然后,我尝试将值“x”保存在一个名为“m”的全局变量中。之后,我更改了函数“A”的输入,以从函数返回另一个值“y”。然而,在此过程中,分配给全局变量“m”的值“x”变为值“y”(因为“m”被分配为等于函数“A”的返回,但不等于值“x”)

在这种情况下,我想提出以下问题:


如何保存第一次从函数“A”获取的值“x”,同时从函数“A”获取值“y”,以便在代码的后面部分使用“x”和“y”?非常感谢

将值存储在字典中

像这样:

GLOBAL_VARIABLE = {}


def calculate_output(input):
    # Calculate and return the output for the given input


def function(input):
    if GLOBAL_VARIABLE.get(input) is None:
        GLOBAL_VARIABLE[input] = calculate_output(input)
    return GLOBAL_VARIABLE[input]
那么程序的其他部分就不需要直接访问全局_变量

始终调用该函数,如果它存在,它将返回一个预先计算的输出,否则它将首先计算它,然后存储以备将来使用。如果可以避免的话,直接使用全局变量被认为是不好的做法

实例:

MULTIPLY_BY_2_CACHE = {}


def calculate_multiply_by_2(number):
    return number * 2


def multiply_by_2(number):
    if MULTIPLY_BY_2_CACHE.get(number) is None:
        print("Calculating result for %d" % number)
        MULTIPLY_BY_2_CACHE[number] = calculate_multiply_by_2(number)
    else:
        print("Retrieving existing result for %d" % number)
    return MULTIPLY_BY_2_CACHE[number]


print(multiply_by_2(1))
print(multiply_by_2(1))
print(multiply_by_2(2))
print(multiply_by_2(3))
print(multiply_by_2(2))
结果:

Calculating result for 1
2
Retrieving existing result for 1
2
Calculating result for 2
4
Calculating result for 3
6
Retrieving existing result for 2
4

您可以将所有这些存储在字典中,因此每次调用函数时,都可以使用您选择的标签将结果存储在字典中。在本例中,我将随机抽取字符,获取它们的unicode点码,并将它们存储在字典中。之后可以使用char查询这些内容

def my_func(char):
    return ord(char)

results = {}
for char in "duthxb":
    results[char] = my_func(char)

print(results)
print(results['t'])
输出

{'d': 100, 'u': 117, 't': 116, 'h': 104, 'x': 120, 'b': 98}
116

把它们储存在一个列表里……或者字典里,以后再查。回答得很好。我只建议将你的
替换为MULTIPLY\u BY\u 2\u缓存。get(number)为None
替换为
如果number不在MULTIPLY\u BY\u 2\u缓存中,因为它会更快,感觉更像python