python 为什么我的函数不返回值给全局变量?[duplicate]

thigvfpy  于 2022-12-25  发布在  Python
关注(0)|答案(4)|浏览(184)
    • 此问题在此处已有答案**:

How do I get a result (output) from a function? How can I use the result later?(4个答案)
6个月前关闭。
为什么print(squared)*返回0而不是100
我以为从函数返回后-变量
squared*的值会被赋给同名的全局变量?

squared = 0
def square(n):
    """Returns the square of a number."""
    squared = n**2
    print "%d squared is %d." % (n, squared)
    return squared

square(10)
print(squared)

退货:

smdncfj3

smdncfj31#

将函数的结果赋给变量:

squared = square(10)

这就是在函数中使用return squared的全部意义,不是吗?

6l7fqoea

6l7fqoea2#

函数square不会改变全局作用域中的变量squared,在函数内部声明一个与全局变量同名的局部变量。但是这只会改变局部变量而不会改变全局变量。2当你使用print(squared)的时候,你打印的是没有改变的全局变量,它仍然是你最初设置的0。考虑到代码的整洁性,你真的应该尽量避免局部变量和全局变量共享相同的名称,因为这会导致混乱(正如我们在这个问题中看到的),并使代码更难阅读。
要在函数内部修改全局变量,你必须使用关键字global让函数名引用全局变量,这样Python才会这么做。Use of "global" keyword in Python
当然,更简单、更好的选择是只使用函数的返回值,最小化全局可变状态的使用是一个很好的目标。

3df52oht

3df52oht3#

这里实际上是在square函数中创建一个局部变量,要更改squared,只需输入:

squared =square(10)
print squared
2wnc66cl

2wnc66cl4#

差不多吧。非常接近了。您需要更改以下内容:

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

希望这有帮助!

相关问题