提问人:sean harricharan 提问时间:11/10/2021 更新时间:11/11/2021 访问量:396
在全局变量上使用 Python 的“加等于”运算符,并使用函数 [duplicate]
Using Python's "plus equals" operator on a global variable with a function [duplicate]
问:
正如标题所暗示的那样,当我尝试执行此函数时:
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”变量难道不会指向内存中的另一个位置,这不是问题吗?
有人可以解释这种行为吗?
答:
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 看到任何运算符在函数中创建特定名称的新变量时,它会立即假设您正在尝试引用局部变量而不是全局变量。要解决此问题,请使用关键字:+=
int
num
global
num = 3
def add_num():
global num
num += 6
print(num)
add_num()
print(num)
更奇怪的是,即使创建带有名称的新变量的行位于函数的底部,尝试在函数顶部引用仍然会产生语法错误,因为 Python 即使在函数的顶部也会看到函数底部的运算符:num
num
=
def add_num():
print(num) # Gives a syntax error
num = 5
评论
0赞
sean harricharan
11/11/2021
我熟悉 python 中的范围,并且知道它是如何工作的。我知道如何解决这个问题,但正在寻找一些关于它的文档,因为这种行为很难完全掌握。
评论