Python函数中的局部变量和全局变量
局部变量
你在函数定义中声明的变量,他们与在函数外使用的其它同名变量没有任何关系,即变量名称对函数来说是局部的。这叫变量的范围。所有变量都有它们被声明的块的范围,从名称定义的点开始。局部变量定义举例:
x = 50 def func(x): print('x等于', x) x = 2 print('局部变量x改变为', x) func(x) print('x一直是', x)输出:
x等于50
局部变量x改变为2
x一直是50
它是如何工作的:
第一次,我们使用函数体中第一行打印变量x的值,Python使用在主块中,函数定义上声明的实参。
接下来,我们给x赋值为2,变量为x对我们的函数来说是局部变量,因此在函数中当我们改变x的值时,在主块中定义的变量x不受影响。
最后调用的print函数,显示在主块中定义的变量x,因此证实,它不受在前面调用函数的局部变量的影响。
使用全局声明
如果你想给在顶层的程序(即未在任何类型的范围如函数或类之中)定义的变量赋值,那么你必须告诉Python,变量不是局部的,而是全局的。我们使用global语句,没有global语句赋值给一个在函数外定义的变量是不可能的。您可以使用这些在函数外定义的变量的值(假设在函数内没有同名的变量)。然而,这并不鼓励,应该避免,因为这使程序的读者不清楚变量是在哪里定义的,使用 global 语句就非常清楚,变量定义在一个最外的块中。
使用全局变量的例子:
x = 50 def func(): global x print('x的值是', x) x = 2 print('全局变量x改为', x) func() print('x的值是', x)输出:
x的值是50
全局变量to改为2
x的值是2
它是如何工作的:
global语句用来声明x是全局变量,当我们在函数内给x赋值时,它的改变映射到我们在主块中使用的x的值。
用同样的global语句可以指定多个全局变量,比如: global x, y, z。