首页 > 编程笔记

Python全局变量和局部变量(变量作用域)

变量作用域(或称变量的有效范围)是由变量所在的位置决定的,从而形成变量不同的有效范围与生命周期。变量作用域用来决定在程序中有哪些语句可以合法使用这个变量。

在 Python 中,变量根据在程序中所定义的位置,可以分为全局变量和局部变量两种作用范围的变量。

Python全局变量和局部变量

定义在函数内部的变量称为局部变量(Local Variable),它的作用域范围为函数内,也就是出了函数外就无效。

除了在函数内部定义变量,Python 还允许在所有函数的外部定义变量,这样的变量称为全局变量(Global Variable)。

全局变量的默认作用域是整个程序,即全局变量既可以在各个函数的外部使用,也可以在各函数内部使用。全局变量的生命周期是从赋值开始的,一直到整个程序结束。

下面的例子说明了全局变量和局部变量的不同。Python代码如下:
def demo():
    n = 10  #局部变量n
    print(product)
product = 100 #全局变量product
print(demo())
print(n)
上述程序代码中变量 n 在函数 demo 中定义,是局部变量,作用域范围在函数 demo() 内,然而程序最后一行代码 print(n) 中使用了局部变量 n,因此程序运行时会提示出错。

变量 product 在函数外定义,是全局变量,程序中任何位置使用它都可以。

Python函数内的全局变量

如果编写的代码中同时有多个相同名称的全局变量与局部变量,Python 会以局部变量为优先。例如,在函数内必须以局部变量为优先;当离开函数时,则会采用全局变量。

我们可以从以下的例子看出这两者的差别。

【示例1】Python代码如下:
def fun():
    num=10  #函数内局部变量
    for i in range(num):
        print('*',end='')
num=30
fun()  #根据局部变量所定义的个数输出符号
print()
for i in range(num): #根据全局变量所定义的个数输出符号
    print('*',end='')
输出结果:

**********
******************************


【示例2】如果要在函数内使用全局变量,则必须在该函数内将该变量以 global 赋值,例如下面的代码:
def fun():
    global num #说明在函数内使用的num变量是全局变量
    for i in range(num):#根据全局变量所定义的个数输出符号
        print('*',end='')
    num=50  #在函数内将全局变量的值改为50
num=30
for i in range(num): #根据全局变量所定义的个数输出符号
    print('*',end='')
print()#换行
fun()  #调用函数
print()#换行
for i in range(num): #全局变量的值已变为50,依此数字输出符号
    print('*',end='')
输出结果:

******************************
******************************
**************************************************

优秀文章