【问题标题】:Python global and local variable inside function函数内部的Python全局变量和局部变量
【发布时间】:2022-08-02 12:24:06
【问题描述】:

我对这部分代码感到困惑(我在这里粘贴的是实际代码的简化版本)。

当我运行以下代码时:

def function_1():
    apples = 0
    apples += 1
    print(apples)


while True:
    function_1()

而且,结果是:

1 1 1 ...

这对我来说很有意义,while循环每次都会调用该函数,并且apples值设置为0,然后将1添加到apples中,我得到一个结果1。

但是,当我运行这段代码时:


apples = 0
def function_1():
    global apples
    apples += 1
    print(apples)



while True:
    function_1()

结果是:

1 2 3 ...

这让我感到困惑,结果不应该与上一个示例中的结果相同吗?每次 while 循环调用函数时,apples 的值应该为 0,只有这次它是全局变量,函数应该检查该值,而不是在函数内部(本地)具有该值。为什么函数每次返回apples = 0时都会增加值?

    标签: python-3.x function loops global local


    【解决方案1】:

    在第一个示例中,您在定义的函数内声明并初始化了变量apples,在第二个示例中,您在函数外声明并初始化了变量apples。让我们分别讨论每种情况。

    案例 1 - apples 内部函数在这种情况下,当while loop调用函数时,首先apples的值为0,然后迭代1,打印出1。第二次,apple 的值被重置为 0,因为function_1 中的第一行是apples = 0。因此,迭代值 1 被打印出来,并一直持续到 while 循环中断。

    案例 2 - apples 外部函数在这种情况下,apples 的值最初为 0。当函数在while循环中被调用时,apples的值被迭代1并且这个值,即1被打印出来。当第二次调用该函数时,apples 的当前值不会改变。 apples 的值现在是 1,根据之前的函数调用,它被 1 迭代,得到 2 并被打印。由于在函数内部迭代之前的任何地方都没有替换当前值,因此该值每次都会增加 1。

    我想你现在可能已经得到了答案。如果你给出了最好的解释,请投票给我的答案:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多