Python局部变量与全局变量

来源:互联网 发布:手机上传淘宝图片空间 编辑:程序博客网 时间:2024/05/22 17:30

Python中的局部全局与全局变量主要体现在函数内的变量与函数外的变量。

局部与全局就是变量的作用域(作用范围)。

当你在函数内部定义变量的时候,它们与函数外具有相同名称的变量没有任何关系,即变量对于函数来说是 局部 的。这也是这个变量的 作用域 。

所有的变量的作用域是它们被定义的块,从它们被定义的地方开始。

使用局部变量:

#!/usr/bin/env python# Filename: func_local.py# -*- encoding:utf-8 -*-def func(x):    print 'x is', x     x = 2   # 定义函数内的变量    print 'Changed local x to', xx = 50   # 这里定义了全局变量func(x)print 'x is still', 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.pydef func():    global x  # 声明变量 x 是全局变量    print 'x is', x    x = 2  # 在函数内部为全局变量 x 赋值    print 'Changed local x to', xx = 50func()print 'Value of x is', 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 声明与主块中同名的变量,那么这个变量会覆盖主块的变量,在函数内而不会使用全局变量,如例一。