Python文法基礎——關於全域變數與局部變數

來源:互聯網
上載者:User

1、函數內部的變數名如果第一次出現,且出現在=前面,即被視為定義一個局部變數,不管全域域中有沒有用到該變數名,函數中使用的將是局部變數,例如:

num = 100def func():    num = 123    print(num)func()

輸出:

123

說明函數中定義的num是一個局部變數,會將全域變數覆蓋。再例如:

num = 100def func():    num += 100    print(num)func()

輸出:

UnboundLocalError: local variable 'num' referenced before assignment

錯誤提示局部變數num在賦值前被應用,也就是該變數沒有定義就使用它,由此再次證明了這裡定義了一個局部變數,而不是使用的全域的num。

總結:函數內部的變數名如果第一次出現,且出現在=前面,即被視為定義一個局部變數。

Python makes educated guesses on whether variables are local or global. It assumes that any variable assigned a value in a function is local.

From: http://www.tutorialspoint.com/python/python_modules.htm

2、函數內部的變數名如果第一次出現,且出現在=後面,且該變數在全域域中已定義,則這裡將引用全域變數,如果該變數在全域域中沒有定義,當然會出現“變數未定義”的錯誤。例如:

num = 100def func():    x = num + 100    print(x)func()

輸出:

200

表示這裡使用的num是全域變數num。

或者其他使用該變數(例如調用成員函數)的情況,也將引用全域變數,例如:

a = [1, 2]def func():    a.append(3)    print(a)    func()

輸出:

[1, 2, 3]

總結:只要是*使用*變數,而該變數在全域域中有定義,而在局部沒有定義,則會使用全域變數。

3、函數中使用某個變數時,該變數名既有全域變數也有同名的局部變數,則會使用局部變數,例如:

num = 100def func():    num = 200    x = num + 100    print(x)func()

結果:

300

總結:如果使用的變數在全域域中有定義,在局部域中也有定義,則預設會使用局部變數。


4、在函數中,如果想給全域變數賦值,則需要用關鍵字global生命,例如:

num = 100def func():    global num    num = 200    print(num)func()print(num)

輸出:

200

200

說明函數中給num賦值為200是修改的全域變數,而且這裡沒有定義新的局部變數,所以後續如果再操作num也是操作的全域變數,例如:

num = 100def func():    global num    num = 200    num += 100    print(num)func()print(num)

輸出:

300

300
總結:如果要在函數中給全域變數賦值,需要用global關鍵字聲明。

By:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.