python 全局变量
发布网友
发布时间:2022-04-06 02:45
我来回答
共3个回答
热心网友
时间:2022-04-06 04:15
首先,python执行过程是顺序执行的!这可能是LZ疑虑的地方
顺序执行是指处于同一作用域下代码才顺序执行,比如这里,test函数定义、localvar=5(赋值)、test()函数调用操作、print localvar打印这几个操作是同一作用域,而函数内的语句则属于test函数的子域。
按照顺序,首先执行的语句是localvar=5,这个时候函数还没调用呢,不会执行localvar=6,然后才调用test函数,global localvar,这里申明函数内用的是localvar全局,好了,执行localvar=6,这里全局的localvar被重新赋值了!函数内的print语句,打印结果是重新复制后的6,函数调用完,继续执行函数最后一个print语句,打印全局localvar,还是为6追问但是如果我声明全局变量的同时也给它赋值,就提示错误啊,比如:global var=6
追答这个是python的语法特性,声明的时候不能同时进行复制
热心网友
时间:2022-04-06 05:33
你直接定义的localvar是个全局变量;而test()这个函数中会定义(或重绑定)全局变量localvar为6。
可以这样理解:函数是一个盒子,所有函数体里定义的变量都只能在盒子里存在。但是global关键字让函数可以定义能拿到盒子外的变量(所以,如果变量名字相同,后来的赋值操作就会覆盖之前的值,这和你在盒子外面的行为是一样的)。
>>> def box():
localvar = 6
>>> def box_with_a_global_var():
global globalvar
globalvar = 6
>>> localvar = 5
>>> box()
>>> localvar
5
>>> box_with_a_global_var()
>>> globalvar = 5
>>> globalvar
5
热心网友
时间:2022-04-06 07:07
把test()放localvar = 5上边先执行就可以了~追问可是我想知道为什么这样执行输出的却是6 6啊?
追答你要先调test函数,然后再改localvar这个变量才会变,你先改变量,后又重新调函数,再打印是不会改变变量的