Python中的局部全局与全局变量主要体现在函数内的变量与函数外的变量。
局部与全局就是变量的作用域(作用范围)。
当你在函数内部定义变量的时候,它们与函数外具有相同名称的变量没有任何关系,即变量对于函数来说是 局部 的。这也是这个变量的 作用域 。
所有的变量的作用域是它们被定义的块,从它们被定义的地方开始。
使用局部变量:
#!/usr/bin/envpython
#Filename:func_local.py
#-*-encoding:utf-8-*-
deffunc(x):
print'xis',x
x=2#定义函数内的变量
print'Changedlocalxto',x
x=50#这里定义了全局变量
func(x)
print'xisstill',x
输出结果:
x is 50
Changed local x to 2
x is still 50
在函数中,我们第一次使用的 x 的值的时候,Python使用函数声明的形参的值。
接着,我们把数值 2 赋值给 x 。x是函数func的局部变量,它的作用域只能在函数内部。所以,当我们改变 x 的值的时候,在主块中定义的 x 不受影响。
在最后的 print 语句中,证明了主块中的 x 的值确实受到影响。
使用 global 语句 声明全局变量:
如果你想要为一个定义在函数外的变量赋值(即想要在函数内改变主块中的变量),那么我们就必须告诉Python这个变量不是局部的,而是 全局 的。我们可使用 global 关键字来声明。如果不使用 global 是不能为定义在函数外的变量赋值的。
你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而不建议这么做,因为这使得程序的读者不清楚这个变量是在哪里定义的。使用 global 可以清楚的表明变量是在外面的块定义的。
#!/usr/bin/python
#-*-encoding:utf-8-*-
#Filename:func_global.py
deffunc():
globalx#声明变量x是全局变量
print'xis',x
x=2#在函数内部为全局变量x赋值
print'Changedlocalxto',x
x=50
func()
print'Valueofxis',x
输入结果:
x is 50
Changed global x to 2
Value of x is 2
使用 global 关键字在函数内声明了变量 x 是全局的,因此,我们在函数内为 x 赋值的时候,这个变化也反映在我们在主块中使用 x 的值的时候。
你可以用同一个 global 指定多个全局变量。如:global x,y,z。
注意两点:
1、如果想要在函数内部去改变主块中的的变量值,需要在函数内部声明这个变量为全局变量;
2、如果在函数内部不使用 global 声明与主块中同名的变量,那么这个变量会覆盖主块的变量,在函数内而不会使用全局变量,如例一。