首页 > 技术文章 > python基础--局部变量与全局变量

utsuro 2018-03-27 12:27 原文

  首先来看两张图,局部变量与全局变量的区别:  

  局部变量:

  

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一般不要省略不写,否则有时候会产生不正常的结果。 

推荐阅读