总结:
如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum的定义和赋值,所以报错。
从下面两个程序看单独的访问或者修改全局变量,并不报错~
#访问全局变量
#!/usr/bin/python
import sys
sum = 5
def add ( a = 1 , b = 3 ):
print a , b
print sum # 仅仅访问
add ( 4 , 8 )
print sum
[ root @rac3 python ] # python local.py
4 8
5
5
#修改同名的全局变量 ,则认为是一个局部变量
#!/usr/bin/python
import sys
sum = 5
def add ( a = 1 , b = 3 ):
print a , b
# 内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量
sum = b + a # 在函数内部修改
print sum
add ( 4 , 8 )
[ root @rac3 python ] # python local.py
4 8
12
下面的程序就会因为“如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum的定义和赋值,所以报错
#!/usr/bin/python
import sys
sum = 5
def add ( a = 1 , b = 3 ):
print a , b
print sum #内部函数引用同名变量,并且修改这个变量。python会认为它是局部变量。因为在此处print之前,没有定义sum变量,所以会报错(建议与情况一比较,备注:此处只是比上例先print sum)
sum = b + a
print sum
add ( 4 , 8 )
print sum
[ root @rac3 python ] # python local.py
4 8
Traceback ( most recent call last ):
File "local.py" , line 10 , in ?
add ( 4 , 8 )
File "local.py" , line 6 , in add
print sum
UnboundLocalError : local variable 'sum' referenced before assignment
遇到在程序中访问全局变量并且要修改全局变量的值的情况可以使用:global关键字,在函数中声明此变量是全局变量
#!/usr/bin/python
import sys
sum = 5
print '改变之前:sum=' , sum
def add ( a = 1 , b = 3 ):
global sum
print 'add 函数中:sum=' , sum
sum = b + a
print '函数中改变之后:sum= ' , sum
add ( 4 , 8 )
print '改变之后 sum=' , sum
[ root @rac3 python ] # vim local.py
改变之前: sum = 5
add 函数中 : sum = 5
函数中改变之后 : sum = 12
改变之后 sum = 12
- 内部函数,不修改全局变量可以访问全局变量
- 内部函数,修改同名全局变量,则python会认为它是一个局部变量
- 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError
如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum的定义和赋值,所以报错。
从下面两个程序看单独的访问或者修改全局变量,并不报错~
#访问全局变量
#!/usr/bin/python
import sys
sum = 5
def add ( a = 1 , b = 3 ):
print a , b
print sum # 仅仅访问
add ( 4 , 8 )
print sum
[ root @rac3 python ] # python local.py
4 8
5
5
#修改同名的全局变量 ,则认为是一个局部变量
#!/usr/bin/python
import sys
sum = 5
def add ( a = 1 , b = 3 ):
print a , b
# 内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量
sum = b + a # 在函数内部修改
print sum
add ( 4 , 8 )
[ root @rac3 python ] # python local.py
4 8
12
下面的程序就会因为“如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum的定义和赋值,所以报错
#!/usr/bin/python
import sys
sum = 5
def add ( a = 1 , b = 3 ):
print a , b
print sum #内部函数引用同名变量,并且修改这个变量。python会认为它是局部变量。因为在此处print之前,没有定义sum变量,所以会报错(建议与情况一比较,备注:此处只是比上例先print sum)
sum = b + a
print sum
add ( 4 , 8 )
print sum
[ root @rac3 python ] # python local.py
4 8
Traceback ( most recent call last ):
File "local.py" , line 10 , in ?
add ( 4 , 8 )
File "local.py" , line 6 , in add
print sum
UnboundLocalError : local variable 'sum' referenced before assignment
遇到在程序中访问全局变量并且要修改全局变量的值的情况可以使用:global关键字,在函数中声明此变量是全局变量
#!/usr/bin/python
import sys
sum = 5
print '改变之前:sum=' , sum
def add ( a = 1 , b = 3 ):
global sum
print 'add 函数中:sum=' , sum
sum = b + a
print '函数中改变之后:sum= ' , sum
add ( 4 , 8 )
print '改变之后 sum=' , sum
[ root @rac3 python ] # vim local.py
改变之前: sum = 5
add 函数中 : sum = 5
函数中改变之后 : sum = 12
改变之后 sum = 12