
python全局变量的问题?
初学者,网站上说,在函数体外定义的变量,一定是全局变量,例如:add="123456"deftext():print("函数体内访问:",add)text()print(...
初学者,网站上说,在函数体外定义的变量,一定是全局变量,例如:
add = "123456"
def text():
print("函数体内访问:",add)
text()
print('函数体外访问:',add)
这样都能拿到add的值
但是这段代码
import threading
num=100
def run(name):
global num
num=num-1
print("线程",name,"执行了!目前num的值为:",num)
for i in range(100):
t=threading.Thread(target=run,args=(i+1,))
t.start()
为什么必须要将num设置为全局变量,不然会报错?num是在函数外设置的变量啊? 展开
add = "123456"
def text():
print("函数体内访问:",add)
text()
print('函数体外访问:',add)
这样都能拿到add的值
但是这段代码
import threading
num=100
def run(name):
global num
num=num-1
print("线程",name,"执行了!目前num的值为:",num)
for i in range(100):
t=threading.Thread(target=run,args=(i+1,))
t.start()
为什么必须要将num设置为全局变量,不然会报错?num是在函数外设置的变量啊? 展开
2020-02-27 · 知道合伙人软件行家
关注

2020-02-28
展开全部
你这样理解吧,内部变量在使用的时候,会检查外部是否有同名变量,有的话,就是他了;
但是在函数体内对这个变量再次赋值,其实更改的只是函数体内的变量,外部变量没有更改到;
所以,如果你希望定义的外部变量可以在函数体内进行修改,那就要加global,不然的话,函数体内修改是传不到外面的;
但是在函数体内对这个变量再次赋值,其实更改的只是函数体内的变量,外部变量没有更改到;
所以,如果你希望定义的外部变量可以在函数体内进行修改,那就要加global,不然的话,函数体内修改是传不到外面的;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单来说就是把global声明去掉之后,num是未定义的,num=num-1是用未定义的一个变量减一再赋值给未定义的变量,报的错就是本地变量未定义。global是声明这个变量在全局环境globals()里。可以把num=100放入到函数中看看结果。上面一个例子,你在函数里加一个add=add[0]试试,也会报错。
追问
请问我给的num=100难道不是给num的定义吗?您说的我没能完全理解
追答
python不允许函数内修改未声明的全局变量,这是限制全局变量范围的约束,不加声明直接改的话,在编写程序中很大程序上会因为别的程序跟全局变量命名相同而出现意外结果
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加上跟global ……就好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询