Python全局变量和局部变量

全局变量和局部变量

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

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 = 1
def 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'] = 18

def 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 = 10
def 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 + 1
UnboundLocalError: local variable 'a' referenced before assignment

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

原文地址:https://www.cnblogs.com/yangliguo/p/7921423.html