python函数局部变量
2017-03-11 15:23
281 查看
python简单变量(不考虑类变量)分为两类: 函数内定义的局部变量,和函数外定义的全局变量
基本访问规则
1. 在函数内部,可以直接读取访问全局变量(注意只读)
2. 在函数内部,如果要修改访问一个变量,那么python一定会认为这是一个局部变量(除非变量用global修饰,后面讲)
所以如果同名全局变量,python会创建一个局部变量
3. 在函数内部,如果修改同名全局变量之前,对变量有读取引用,那么会引发UnboundLocalError: local variable 'i' referenced before assignment错误
Traceback (most recent call last):
File "./tt.py", line 6, in <module>
f()
File "./tt.py", line 4, in f
j = i + 1
UnboundLocalError: local variable 'i' referenced before assignment
聪明的程序员马上就会思考, 会什么不让前面一行引用全局变量i,而在i=20之后的对i的引用才使用本地变量呢;技术上完全可以这么做,试想一旦这么做,导致同一个代码块里的同名变量指向的是不同的变量,其结果是代码的可读性可维护性变得极差,对后期代码的调试,BUG修正简直是个大坑。
基本访问规则
1. 在函数内部,可以直接读取访问全局变量(注意只读)
#!/usr/bin/env python i = 10 def f(): j = i + 1 # 读取全局变量i f() print "i=%d" % i
2. 在函数内部,如果要修改访问一个变量,那么python一定会认为这是一个局部变量(除非变量用global修饰,后面讲)
所以如果同名全局变量,python会创建一个局部变量
#!/usr/bin/env python i = 10 def f(): i = 20 # 赋值操作, 创建一个本地变量i f() print "i=%d" % i
3. 在函数内部,如果修改同名全局变量之前,对变量有读取引用,那么会引发UnboundLocalError: local variable 'i' referenced before assignment错误
#!/usr/bin/env python i = 10 def f(): j = i + 1 # 开始此行代码试图引用权变量i i = 20 # 而此行表明i是本地变量,反推出前面一行的i应该是本地变量,但在执行前面一行时本地变量并没有创出出来,所以报错 f() print "i=%d" % i
Traceback (most recent call last):
File "./tt.py", line 6, in <module>
f()
File "./tt.py", line 4, in f
j = i + 1
UnboundLocalError: local variable 'i' referenced before assignment
聪明的程序员马上就会思考, 会什么不让前面一行引用全局变量i,而在i=20之后的对i的引用才使用本地变量呢;技术上完全可以这么做,试想一旦这么做,导致同一个代码块里的同名变量指向的是不同的变量,其结果是代码的可读性可维护性变得极差,对后期代码的调试,BUG修正简直是个大坑。
相关文章推荐
- python函数局部变量用法实例分析
- 【python】*函数:全局局部变量、内部函数、闭包
- 5.1 Python 函数-默认参数,*args,**kwargs的使用;作用域-局部空间使用全局变量需要注意的事项等
- 【ZZ已解决】Python中如何在嵌套函数内部访问被嵌套(的父级函数)中的(局部,非全局)变量
- Python3学习笔记4-函数,全局变量&局部变量,内置函数
- python函数局部变量用法实例分析
- Python3学习笔记4-函数,全局变量&局部变量,内置函数
- 【Python】PYTHON 函数局部变量和全局变量
- 个人理解函数返回局部变量
- Python体验(01)-变量、函数和基本控制语句
- python 判定变量是函数
- 返回指向局部变量指针的函数 与 返回局部变量引用的函数
- 局部变量。函数参数。const类型。
- 函数返回局部变量(转)
- Learn Python The Hard Way学习(19) - 函数和变量
- effective C++笔记之条款31、32: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针所指对象的引用、尽可能地推迟变量的定义
- 函数结束后,里面的局部变量还可以用吗
- 函数返回值—返回局部变量
- python中那些双下划线开头得函数和变量
- static全局变量与普通的全局变量的区别/static局部变量和普通局部变量的区别/static函数与普通函数的区别