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

python函数局部变量

2017-03-11 15:23 281 查看
python简单变量(不考虑类变量)分为两类: 函数内定义的局部变量,和函数外定义的全局变量

基本访问规则

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修正简直是个大坑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: