您的位置:首页 > 编程语言 > Python开发

python函数变量的作用域

2016-09-20 17:51 344 查看

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 "<stdin>", line 1, in <module>
NameError: name 'localvar' is not defined
>>> print para1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'para1' is not defined
>>> print para2
Traceback (most recent call last):
File "<stdin>", 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息