Python全局变量和局部变量

来源:互联网 发布:什么是主域名与子域名 编辑:程序博客网 时间:2024/05/18 13:08

全局变量和局部变量

  定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
  局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

total = 0; # 这是一个全局变量# 可写函数说明def sum( arg1, arg2 ):    #返回2个参数的和."    total = arg1 + arg2; # total在这里是局部变量.    #在函数中 如果对一个和全局变量名相同的变量进行=value的时候,默认是定义一个变量    #只不过这个变量的名字和全局变量的名字相同罢了    print ("函数内是局部变量 : ", total)    return total;#调用sum函数sum( 10, 20 );print ("函数外是全局变量 : ", total)

以上实例输出结果:

函数内是局部变量 : 30
函数外是全局变量 : 0

global 和 nonlocal关键字

global

  当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

以下实例修改全局变量 num:

num = 1def fun1():    global num  # 使用global用来对一个全局变量的声明,那么这个函数中的num就不是定义一个局部变量,而是                #对全局变量进行修改    print(num)     num = 123    print(num)fun1()

以上实例输出结果:
1
123

列表是当全局变量的
如下面的例子

nums = [11,22,33]infor = {"name":"wang"}def test():    #for num in nums:    #    print(num)    nums.append(44)    infor['age'] = 18def test2():    print(nums)    print(infor)test() #[11, 22, 33, 44]test2() #{'name': 'wang', 'age': 18}

nonlocal

  如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

def outer():    num = 10    def inner():        nonlocal num   # nonlocal关键字声明        num = 100        print(num)    inner()    print(num)outer()

以上实例输出结果:
100
100

另外有一种特殊情况,假设下面这段代码被运行:

a = 10def test():    a = a + 1    print(a)test()

以上程序执行,报错信息如下:

Traceback (most recent call last):  File "test.py", line 7, in <module>    test()  File "test.py", line 5, in test    a = a + 1UnboundLocalError: local variable 'a' referenced before assignment

  错误信息为局部作用域引用错误,因为 test 函数中的 a 使用的是局部,未定义,无法修改