python函数变量的作用域

python函数变量的作用域问题:


Python 2.7.5 (default, Nov 20 2015, 02:00:19)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.


python变量按作用域分类
局部变量(Local Variable)
全局变量(Clobal Variable)


文本实例1

>>> def Local_Var(para1,para2):
...     localvar = para1 + para2
...     return localvar
... 
>>> num = Local_Var(1,2)
>>> print num
3

试图打印局部变量的后果

>>> print localvar
Traceback (most recent call last):
  File "", line 1, in <module>
NameError: name 'localvar' is not defined
>>> print para1
Traceback (most recent call last):
  File "", line 1, in <module>
NameError: name 'para1' is not defined
>>> print para2
Traceback (most recent call last):
  File "", line 1, in <module>
NameError: name 'para2' is not defined

原理分析:
para1和para2以及localvar变量的作用域就在函数的作用域内,出了函数作用域将不生效
python在调用函数时,是利用栈内存地址空间存储的,将函数执行时所需要的变量,数据结构算法扔到栈里面去执行
然后返回结果,当函数执行完后,该函数在内存的栈空间中的数据以及数据结构等代码将被垃圾回收。那么,外部不能访问
函数在调用时在内存栈中的变量


该实例中num就是全局变量,其作用域是整个代码段

>>> def print_global():
...     print num
... 
>>> print_global()
3

注意:最好不要在python中尝试修改全局变量类似如下:

>>> def modify_global():
...     num = 100
...     print num
... 
>>> modify_global()
100
>>> print num
3

如果试图在函数中修改局部变量,函数在调用时,就会在栈中创建一个新的局部变量代替,名字跟之前的全局变量一样,
从而让这个局部变量参与运算,这就所谓的屏蔽机制(shadow)。但之前的全局变量在函数作用域外并没有失效。


文本实例2

>>> count = 5
>>> def localvar():
...     count = 10
...     return count
... 
>>> localvar()
10
>>> print count
5

python中修改全局变量

global关键字

>>> count = 5
>>> def globalvar():
...     global count
...     count = 10
...     return count
... 
>>> globalvar()
10
>>> print count
10

你可能感兴趣的:(Python开发)