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
相关文章推荐
- python 中模块(model)概念的引入 以及 函数变量的作用域
- Bean的作用域
- JSP九大内置对象及四大作用域详解
- 理解 Javascript 中变量的作用域
- 赋值运算符=,:=和变量作用域
- 函数作用域
- Spring bean 的5个作用域 Spring Bean的默认作用域为:singleton。它相比其他作用域的优点是系统开销小,Bean实例一旦创建成功便可重复使用。 1.singleton作用域
- java变量的作用域和访问修饰符
- 变量的作用域和存储类型
- JavaScript高级之---词法作用域的含义、变量的作用域链
- JSP九大内置对象及四个作用域
- JS:模仿块级作用域及私有变量
- JavaScript作用域、作用域链、闭包详解
- [python]变量作用域问题
- 不得不了解的四大作用域:application,session,request,page
- spring—bean的作用域
- javascript中垃圾收集机制和块级作用域的概率
- 4000 java变量作用域Scope
- js 中作用域、闭包的总结
- Jmeter元件作用域和执行顺序