首先来看两张图,局部变量与全局变量的区别:
局部变量:
class MyClass(): def a(self): n=100 print(‘a中的n数值为:%d‘%(n)) def b(self): n=n+200 print(‘b中的n数值为:%d‘%(n))
这个时候就会报错,函数b中的n=n+200会显示n未定义错误,原因是n只是在函数a中定义了一个值100,但是函数b中并未赋值,如果还是要使用n这个数值,就可以定义一个全局变量,表示区分我这里写成_n
全局变量:
_n=1111 class MyClass(): def a(self): n=100 print(‘a中的n数值为:%d‘%(n)) def b(self): global _n n=_n+1111 print(‘b中的n数值为:%d‘%(n)) return _n ret=MyClass() print(ret.b())
运行的结果:
b中的n数值为:2222
1111
如果修改n=_n+1111为_n=_n+1111,那么全局变量也会随之改变,示例代码如下:
_n=1111 class MyClass(): def a(self): n=100 print(‘a中的n数值为:%d‘%(n)) return _n def b(self): global _n _n=_n+1111 print(‘b中的n数值为:%d‘%(_n)) return _n ret=MyClass() print(ret.b()) print(ret.a())
运行结果:
b中的n数值为:2222
2222
a中的n数值为:100
2222
这里可以看见,在调用b函数后,已经对全局变量_n进行了修改,变成了2222,再接下来调用a函数的时候,返回值return _n是已经被b函数修改后的全局变量_n,数值是2222。
如果再次调用b函数,数值将会变成3333,因为全局变量_n在2222的基础上又一次被b函数+1111。
代码如下:
_n=1111 class MyClass(): def a(self): n=100 print(‘a中的n数值为:%d‘%(n)) return _n def b(self): global _n _n=_n+1111 print(‘b中的n数值为:%d‘%(_n)) return _n ret=MyClass() print(ret.b()) print(ret.b()) print(ret.b()) print(ret.a())
运行结果:
b中的n数值为:2222
2222
b中的n数值为:3333
3333
b中的n数值为:4444
4444
a中的n数值为:100
4444
当然,如果你看着打印结果后面跟着把函数返回值也打印了很不舒服,也可以直接写成ret.b(),不需要print,这样就只会打印:b中的n数值为:2222,而不会把返回值2222跟在后面打印出来
ps:值得注意的是,引用全局变量保留字global一般不要省略不写,否则有时候会产生不正常的结果。
原文地址:https://www.cnblogs.com/utsuro/p/8656788.html
时间: 2024-10-10 21:22:34