iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
自我挑戰組

Python淺顯易懂的小教室系列 第 23

[Day_23]函式與遞迴_(2)

函式與變數的作用範圍

變數作用範圍分成全域變數與函式內的區域變數,宣告在最上面最外層的稱作全域變數,宣告在函式內的變數稱作區域變數,函式內若沒有那個變數就會往函式外找尋,舉例如以下範例:

#input
g = 10
def f1():
    print(g)
f1()

#output
10

若函式內有一個區域變數,與全域變數名稱一樣的變數,若讀取區域變數在初始化區域變數之前,則會產生UnboundLocalError錯誤,下表中程式第3行。因為會產生UnboundLocalError錯誤,所以使用井字號「#」進行註解讓該行沒有作用,若要測試此錯誤就可以將井字號「#」刪除,再執行程式一次,就會出現UnboundLocalError錯誤。

從以下程式可以發現,全域變數g與區域變數g,是兩個不同的變數,函式內區域變數g作用範圍在函式內,全域變數g作用範圍為整個檔案,但因為函式內區域變數有相同的變數名稱,函式會優先使用區域變數,若找不到才去找全域變數。

#input
g = 10
def f1():
    #print(g)
    g = 20
    print(g)
f1()
print(g)

#output
20
10

函式內若沒有那個變數就會往函式外去尋找,也可以使用global宣告區域變數,該區域變數將明確指向全域變數,也就是宣告為global的區域變數一定指向相同名稱的全域變數,如下:

#input
g = 10
def f1():
    global g
    print(g)
    g = 20
    print(g)
f1()
print(g)

#output
10
20
20

明天會給一些題目做練習喔!!
/images/emoticon/emoticon12.gif


上一篇
[Day_22]函式與遞迴_(1)
下一篇
[Day_24]函式與遞迴_(3)
系列文
Python淺顯易懂的小教室30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言