更改函数后如何保存和分配函数的返回值?

时间:2019-11-15 13:26:08

标签: python global-variables

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

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

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

如何一次保存从函数“ A”获得的值“ x”,同时从函数“ A”获得值“ y”,这样我就可以利用“ x”我的代码后面的部分是“ y”?非常感谢。

2 个答案:

答案 0 :(得分:0)

将值存储在字典中。

赞:

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]

那么程序的其他部分就不需要直接访问GLOBAL_VARIABLE。

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

实际示例:

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

答案 1 :(得分:0)

您可以将所有这些存储在字典中,因此每次调用该函数时,都使用您选择的标签将结果存储在字典中。在此示例中,我将获取随机字符,并获取它们的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