1. 程式人生 > >Python全局變量和局部變量

Python全局變量和局部變量

pytho class append logs ble 錯誤信息 嵌套 eba 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 使用的是局部,未定義,無法修改

Python全局變量和局部變量