内部函数有引用外部函数的同名变量或者全局变量, 并且对这个变量有修改. 那么 python 会认为它是一个局部变量
- sum=b+a # 在函数内部修改
- print sum
- add(4,8)
- [root@rac3python]# python local.py
- 4 8
- 12
下面的程序就会因为如果内部函数有引用外部函数的同名变量或者全局变量, 并且对这个变量有修改. 那么 python 会认为它是一个局部变量, 又因为函数中没有 sum 的定义和赋值, 所以报错
- #!/usr/bin/python
- import sys
- sum=5
- defadd(a=1,b=3):
- print a,b
- printsum #内部函数引用同名变量, 并且修改这个变量 python 会认为它是局部变量因为在此处 print 之前, 没有定义 sum 变量, 所以会报错 (建议与情况一比较, 备注: 此处只是比上例先 print sum)
- sum=b+a
- printsum
- add(4,8)
- print sum
- [root@rac3python]# python local.py
- 48
- Traceback(mostrecentcalllast):
- File"local.py",line10,in?
- add(4,8)
- File"local.py",line6,inadd
- printsum
- UnboundLocalError:localvariablesumreferencedbeforeassignment
遇到在程序中访问全局变量并且要修改全局变量的值的情况可以使用: global 关键字, 在函数中声明此变量是全局变量
- #!/usr/bin/python
- importsys
- sum=5
print 改变之前: sum=,sum
- defadd(a=1,b=3):
- globalsum
printadd 函数中: sum=,sum
sum=b+a
print 函数中改变之后: sum= ,sum
add(4,8)
print 改变之后 sum=,sum
[root@rac3python]# vim local.py
改变之前: sum=5
add 函数中: sum=5
函数中改变之后: sum= 12
改变之后 sum=12
来源: http://www.bubuko.com/infodetail-2498037.html