为什么我的函数没有将值返回到全局变量? [蟒蛇]

时间:2015-09-02 22:41:35

标签: python variables python-3.x scope return

为什么 打印(平方) 返回 0 而不是 100

我认为从函数返回后 - 变量 平方 的值会被分配给具有相同名称的全局变量吗?

#if CUSTOM_CLOCK_MONOTONIC != CLOCK_REALTIME
    if (clock_gettime(CUSTOM_CLOCK_MONOTONIC,tp) == 0) {
        return;
    }
#endif

返回:

enter image description here

4 个答案:

答案 0 :(得分:5)

将函数的结果分配给变量:

squared = square(10)

这是在函数中使用return squared的重点,不是吗?

答案 1 :(得分:3)

函数square永远不会更改在全局范围中找到的变量squared。在函数内部,您声明一个与全局变量同名的局部变量,但这将更改局部变量而不是全局变量。然后,当您print(squared)打印未更改的全局变量时,该变量在您最初设置时仍为0。作为代码清洁的问题,你真的应该尽量避免让局部变量和全局变量共享相同的名称,因为它会引起混淆(正如我们在这个问题中看到的那样)并使代码更难阅读。

要从函数中更改全局变量,必须使用global keyword告诉Python这样做,以使名称引用全局变量。您可能想看看这个问题:Use of "global" keyword in Python

当然,更简单,更好的选择就是使用函数的返回值。最大限度地减少全局可变状态的使用是一个很好的目标。

答案 2 :(得分:1)

基本上这里发生的是你在square函数中创建一个局部变量。要更改平方,只需键入:

squared =square(10)
print squared

答案 3 :(得分:-1)

排序。你非常接近。您需要更改以下内容:

def square(n):
    """Returns the square of a number."""
    squared = n**2

要:

def square(n):
    """Returns the square of a number."""
    global squared

    squared = n**2

希望这有帮助!