外部不能访问函数内部变量
>>> def fun1():
x = 1
>>> print(x)
#结果
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print(x)
NameError: name 'x' is not defined
函数内部能够访问函数外部变量:
>>> x = 123
>>> def fun2():
print(x)
#结果:
>>> fun2() #调用函数
123
函数里面不能修改函数外部变量:
>>> x = 123
>>> def fun3():
x = x + 1
print(x)
#结果
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
fun3()
File "<pyshell#17>", line 2, in fun3
x = x+1
UnboundLocalError: local variable 'x' referenced before assignment
函数里面和函数外部变量名相同:
>>> x = 123
>>> print(x, id(x))
123 8791238636176
>>> def fun4():
x = 456
print(x, id(x))
>>> fun4()
#结果
456 45350000
说明
1.变量是先定义,再使用。
2.如果在最近的作用域里有定义,就会使用最近作用域的变量。
3.如果在函数里面没有定义,它会往它的外层去找。
4.如果外层有定义,就使用.
global(全局变量)
>>> x = 123
>>> def fun1():
global x
x+=1
return x
>>> fun1()
124
nonlocal(上一级函数中的局部变量)
在函数嵌套函数的情况下,同样也有函数作用域的问题,python3中提供了方便,只需要使用nonlocal就可以在里层函数内部修改外部函数变量.
>>> def fun2():
x = 123
def fun3():
nonlocal x
x+=1
return x
return fun3()
>>> fun2()
124