在全局变量上使用 Python 的“加等于”运算符,并使用函数 [duplicate]

Using Python's "plus equals" operator on a global variable with a function [duplicate]

提问人:sean harricharan 提问时间:11/10/2021 更新时间:11/11/2021 访问量:396

问:

正如标题所暗示的那样,当我尝试执行此函数时:

num = 3


def add_num():
    num += 6
    print(num)


add_num()
print(num)

它给出以下错误:

Traceback (most recent call last):
  File "C:/Users/Sean/Desktop/Programming/Python_prac/test.py", line 9, in <module>
    add_num()
  File "C:/Users/Sean/Desktop/Programming/Python_prac/test.py", line 5, in add_num
    num += 6
UnboundLocalError: local variable 'num' referenced before assignment

让我感到困惑的是,一旦你不尝试将它分配给自己,你就可以在函数中引用“num”。但是,在函数中创建的“num”变量难道不会指向内存中的另一个位置,这不是问题吗?

有人可以解释这种行为吗?

python 函数 赋值运算符

评论

0赞 Joshua Voskamp 11/10/2021
听起来像是对 Python 如何解析命名空间和范围的误解
0赞 MisterMiyagi 11/11/2021
这回答了你的问题吗?为什么写入变量会改变其作用域?

答:

0赞 Shanavas M 11/10/2021 #1
num = 3


def add_num():
    global num
    num += 6
    print(num)


add_num()
print(num)

会做

评论

2赞 joanis 11/11/2021
你是第一个发布这个答案的人,在你之后又有三个人发布了它,但它是你的,在低质量的答案审查队列中。我投票决定保留它,但也许解释关键字的答案最终会成为首选。一般来说,最好放入一些文本来解释问题和解决方案,而不仅仅是发布代码。global
0赞 CanciuCostin 11/10/2021 #2

这是因为 num 变量范围是函数的本地变量。 为了能够访问全局 num 变量,您必须利用 global 关键字:

um = 3


def add_num():
    global num
    num += 6
    print(num)


add_num()
print(num)

输出:

9
0赞 ashishh87 11/10/2021 #3

要使用不在函数范围内的变量,我们可以使用 global 关键字来使用它。

num = 3

def add_num():
    global num
    num += 6
    print(num)

add_num()
print(num)
2赞 Lecdi 11/11/2021 #4

如果您尝试引用全局变量或从函数中调用其任何方法,那么它将正常工作。但是当尝试更改一个值时,问题就来了 - 运算符实际上并没有更改存储在内存中的值,因为 s 是不可变的。因此,它创建一个新变量,其名称也等于前一个值加 6。但是,当 Python 看到任何运算符在函数中创建特定名称的新变量时,它会立即假设您正在尝试引用局部变量而不是全局变量。要解决此问题,请使用关键字:+=intnumglobal

num = 3

def add_num():
    global num
    num += 6
    print(num)

add_num()
print(num)

更奇怪的是,即使创建带有名称的新变量的行位于函数的底部,尝试在函数顶部引用仍然会产生语法错误,因为 Python 即使在函数的顶部也会看到函数底部的运算符:numnum=

def add_num():
    print(num)  # Gives a syntax error
    num = 5

评论

0赞 sean harricharan 11/11/2021
我熟悉 python 中的范围,并且知道它是如何工作的。我知道如何解决这个问题,但正在寻找一些关于它的文档,因为这种行为很难完全掌握。