一个程序的所有变量并不是在任何位置都可以被访问。每个变量都有自己的作用域,更通俗地讲,就是在什么范围是可用。根据作用域,我们可以将变量氛围两种类型:
- 局部变量
- 全局变量
1.局部变量
每次函数的调用都会创建一个局部变量。
def f():
x=10
return x*x
print(f())
print(x)
NameError: name 'x' is not defined
当我们输出x的时候,报错了。由此我们可以看出“x=10”发生在定义函数的内部,变量x是局部变量。当我们在f()外访问x时,超出了x的作用域,于是就会报错。
2.全局变量
def f():
x=10
return x*x
x=1000
print(x)
1000
第一个x在函数定义的范围内,而第二个x在函数之外赋值。由上面我们可以推出。
当代码中只有一个x变量,且在函数之外赋值,那么它就是全局变量。
3.全局变量和局部变量同名
def f():
x=5
print('f内部:x=',x)
return x*x
x=10
print('f()=',f())
print('f外部:x=',x)
>>>
f内部:x= 5
f()= 25
f外部:x= 10
当既能访问局部变量,哟能访问全局变量的时候,Python遵循:局部优先。也就是当局部变量和全局变量同名的时候,局部变量屏蔽全局变量。
注意
如果一定要在函数定义中访问全局变量的话,就使用关键字global声名。
def f():
global x
x=10
return x*x
print(x)
>>>
10