Python的局部变量和全局变量

在python中,引用全局变量有些特殊的地方。我们来看代码例子。

>>> num=1
>>> def test():
...     print num
...     value = num+1
...     print value
...
>>> test()
1
2

上面代码先定义了一个全局变量num,这时我们就可以在函数内部随便使用这个全局变量。

但是如果我们要在函数内部修改全局变量,写法就有些特殊了,如:

>>> num=1
>>> def test():
...     num=2
...     print num
...
>>> test()
2
>>> num
1

可以看出,在函数内部 num=2 操作并不是对全局变量操作,而是产生一个新的局部变量。对全局变量没有任何影响。
某些情况下,还会报错,如:

>>> num=1
>>> def test():
...     num=num+1
...
>>> test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in test
UnboundLocalError: local variable ‘num‘ referenced before assignment

从报错的信息看,在test函数内,仍然把num当作局部变量,但因为没有赋值前就被引用,所以报错。

要想在函数内,引用全局变量,正确的做法是需要先通过 global 关键字引用一下,如:

>>> num=1
>>> def test():
...     global num
...     num=num+1
...     print num
...
>>> test()
2
>>> num
2

可以看出,用global关键字标识下后,就可以在函数内使用了。

当然,需要强调一下,正常在应用开发中,我们应该避免使用全局变量,这里是从语法角度来解释下。

时间: 2024-11-03 07:52:43

Python的局部变量和全局变量的相关文章

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

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

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 cla

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

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

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

python局部变量和全局变量(6)

在python开发中,变量也是有生命周期的,一旦周期结束,程序会自动清理暂用的空间,释放内存,变量分为两者,一种是局部变量,一种是全局变量,两者具体有什么区别呢…… 一.局部变量 一般而言在函数内部或者类中声明的变量默认都是局部变量.一旦函数结束,变量的生命周期也会结束,占用的空间会被自动释放. def func1(): # 在函数内部定义的变量默认都是局部变量 a = 1 print(a) # 函数结束,局部变量a的生命周期结束 # 由于a是局部变量,并且a的生命周期已经结束,外部再次调用局部

局部变量 与 全局变量

# ### 局部变量 与 全局变量 ''' 局部变量:在函数内部声明的变量就是局部变量. 全局变量:在函数外部声明的变量或用global关键字在函数内部声明的变量 作用域:作用的范围 局部变量:作用范围在函数的内部 全局变量:作用范围横跨整个文件 ''' # (1) 局部变量的获取和修改 def func(): a = 1 # 获取局部变量 print(a) # 修改局部变量 a = 2 print(a) func() #(2) 全局变量的获取和修改 c = 15 # 获取 print(c) #