Python 变量在多个函数之间保持其值 [duplicate]

Python Variable keeping it's value across multiple functions [duplicate]

提问人:Tar-Eruntalion 提问时间:4/21/2023 更新时间:4/21/2023 访问量:38

问:

我正在编写一个程序,其中我的值在开始时为 0,但在整个程序中用于跟踪“更改”,然后我想打印更改的总和,其余代码工作正常,但由于某种原因,进入多个函数的变量不会保留更改并在我打印时返回它们,但每次都返回 0

var = 0

def func1(var1):
    for i in range(x):
        for j in range(y):
            if condition:
                pass
            elif condition:
                func2(var1)
    return var1

def func2(var2):
    if condition:
        pass
    elif condition:
        var2 += 1
    return var2

func1(var)
print(var)
嵌套 Python 函数 变量

评论

2赞 chepner 4/21/2023
你应该阅读 nedbatchelder.com/text/names.html
0赞 Matthias 4/21/2023
您返回,但未捕获 中的值。也许你想要 ?var2func2func1var1 = func2(var1)
0赞 Swifty 4/21/2023
@chepner:感谢您提供此链接,这是一本非常有趣的读物,即使对于已经了解基础知识的人来说也得到了很好的解释!
0赞 Tar-Eruntalion 4/26/2023
@Matthias我想捕获 func1 中的值,并最终将函数内部的累积值返回到外部的 var 变量

答:

1赞 UnsanitizedInput 4/21/2023 #1

您正在传递 as ,操作 var1 的值并返回 的值。但是,您不会将变量分配给 的返回值。因为你不是在操纵它自己,只是在操纵它的值,当你在最后打印时,你仍然会得到它的原始值。试试这个:varfunc1()var1var1func1()varfunc1()var

output = func1(var)
print(output) # will print an updated value - I can't say what value as I don't know x and y
print(var) # will still print 0 as you are not actually modifying var itself.

如果在你内部没有传入参数,而是在操作而不是参数,var 就会被改变。但是在 python 中,您只是修改您传入的值,而不是变量的实际值。func1()varvar1

我建议研究按值传递、按引用传递以及 python 如何处理这些事情。

6赞 chepner 4/21/2023 #2

int值是不可变的,Python 不使用引用调用语义。 将局部变量设置为引用等于 的对象。它既不改变最初分配给 的值,也不更新最初用于传递值的变量。var2 += 1var2intvar2 + 1var2func2