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

原文地址:https://www.cnblogs.com/utsuro/p/8656788.html

时间: 2024-10-10 21:22:34

python基础--局部变量与全局变量的相关文章

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

局部变量与全局变量 如果函数的内容无global关键字,优先读取局部变量,能读取全局变量,无法对全局变量重新赋值,但是对于可变类型,可以对内部元素进行操作. 如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值. 递归 特性: 1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少 3.递归效率不高,递归层次过多会导致栈溢出 例: def calc(n): if int(n/2) == 0: return n return (int(n/

python基础局部变量、全局变量

局部变量的作用域只作用与当前函数块(或代码块)中,对函数块(或代码块)之外的重名变量,没有任何影响. 在函数块(或代码块)中,局部变量可用通过global关键字声明变量来改变在函数块(或代码块)之外对该变量做的操作. 在函数里面定义的global全局变量,最好不要在函数里面改全局变量. 全局变量 作用域为整个程序包括函数中没有重名变量的代码块,如果有重名的,在函数中定义的局部变量起作用,全局变量不起作用. 变量为整数或字符型,最好不要在函数中做修改,其他类型的可以. 原文地址:https://w

python入门基础教程07 python的局部变量和全局变量

局部变量 要谈局部变量和全局变量的技术前提是对函数有一定的理解,我们先在这里简单说明一下Python的函数,Python有自带的函数也可以使用第三方工具包了外部引用函数,有的时候用户自己可以自主开发一些特定功能的函数我们称之为自定义函数.用户怎么才能自己定义函数呢?Python 规定的自定义函数语法结构如下: def function_name(parameters): (TAB)statement1 (TAB)statement2 (TAB)statement3 (TAB)etc. 第1行是定

Python的局部变量和全局变量

在python中,引用全局变量有些特殊的地方.我们来看代码例子. >>> num=1 >>> def test(): ... print num ... value = num+1 ... print value ... >>> test() 1 2 上面代码先定义了一个全局变量num,这时我们就可以在函数内部随便使用这个全局变量. 但是如果我们要在函数内部修改全局变量,写法就有些特殊了,如: >>> num=1 >>&g

python基础(局部、全局变量、函数、文件的操作)

局部变量 可以用返回值全局变量如果一个函数有返回值,在没有调用函数之前 用这个变量保存的话,没有任何的意义global如果在局部变量中加入global 用来对一个全局变量的声明wendu = 0def test1():global wenduwendu = 33 def test2():print("%d"%wendu)#test1()test2() 结果为0 wendu = 0def test1():global wenduwendu = 33 def test2():print(&

PYTHON 函数局部变量和全局变量

有这样一段PYTHON代码,从事C语言开发的人都知道,如果定义了全局变量,而函数内没有定义同名的函数变量的话,那么在函数内对该变量的赋值就是对全局变量空间数值的修改, 然后在PYTHON中却不尽相同,在python中的函数中,如果没有明确声明是全局变量,那么python就会为函数创建局部变量,所以函数中操作的变量也是局部变量 count = 5 def myfun(): count = 10 print(count) myfun() print(count) 打印的结果如下 那么如何在函数中修改

python(10)——局部变量、全局变量

局部变量:在局部生效的,出了这个变量的作用域,这个变量就失效了.函数内部定义的变量就是局部变量,函数运行完就释放该变量内存 全局变量:在整个程序里面都生效的,在程序最前面定义的都是全局变量,全局变量如果要在函数中修改的话,需要加global关键字声明,如果是list.字典和集合的话,则不需要加global关键字,直接就可以修改 . 尽量少用全局变量,原因:1.若全局变量被修改,影响较大:2.全局变量在python文件运行完才会释放,占内存 name ='wangchan' #全局变量 每个函数里

Python中局部变量与全局变量的解释

num = 5 def  func(): num += 1 print(num) print(num) 输出:UnboundLocalError: local variable 'num' referenced before assignment 翻译:局部变量错误:变量 "num" 未被定义就被应用了.由此再次证明了这里定义了一个局部变量,而不是使用的全局的 "num" 总结:当已经在函数体外的变量已经被定义为全局变量后,在函数体内又被重新赋值一遍,这时的变量在函

python基础 - global关键字及全局变量的用法

python中global关键字主要作用是声明变量的作用域. 在C语言中,由于变量一定是先声明,后使用,所以我们可以清楚的知道,现在使用的变量是全局还是局部,比如: int a = 5; void test(void) { a = 1; // 没有先声明,所以用的是全局的变量a } void test1(void) { int a; a = 2; // 前面声明了,所以用的是局部变量a,对其所做的修改不会影响全局变量a } void main(void) { printf("before: a