python基础--局部变量与全局变量

Posted utsuro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础--局部变量与全局变量相关的知识,希望对你有一定的参考价值。

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

  局部变量:

  

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

以上是关于python基础--局部变量与全局变量的主要内容,如果未能解决你的问题,请参考以下文章

python 3 基础之局部变量与全局变量

Python学习——02-Python基础——4-变量与递归函数

Python3基础 当函数中的局部变量与全局变量同名了,各管各的

python基础 函数局部变量 全局变量 递归

Python基础局部变量全局变量,递归的特性——07

象皮筋Python 基础知识函数与函数式编程