今天用函式的時候遇到了乙個問題,後來總結了下:
函式中若對變數進行了初始化,則該變數為區域性變數;若沒有初始化而直接對該變數操作,則該變數為全域性變數。一般這種情況出現在列表和字典的使用中。如:
a = 1
b = 1
list =
dict = {}
def ch1():
b = a + 1
def ch3():
dict[『x』] = 1
ch1()
ch2()
ch3()
print(b)
print(list)
print(dict)
執行結果為:
1[10]
list 和 dict 的結果被修改了(b = a +1相當於也對b進行了初始化)
如果ch2()和ch3)()的定義改為
def ch3():
dict =
dict[『x』] = 1
return dict
則執行ch2()和ch3()後
執行結果為1
{}list和dict沒有被修改。
那麼什麼時候需要將變數變成全域性變數呢?可能在進行函式的遞迴時,或者有迴圈時。需要在函式外進行初始化,然後在函式中直接操作,作為全域性變數使用。否則在遞迴過程中每次呼叫函式變數都進行了初始化,之前的結果沒有保留。比如統計檔案個數和大小那道題目。
函式 引數 變數作用域
一 函式引數 1.必須引數 必需引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣。呼叫printme 函式,你必須傳入乙個引數,不然會出現語法錯誤 小括號內的就是引數 小括號內沒東西叫做無參,有叫有參 求任意三個數之和 在定義函式的時候小括號內寫的是變數名字,不需要賦值 在呼叫函式的時候小...
Shell中指令碼變數和函式變數的作用域
在shell中定義函式可以使 模組化,便於復用 不過指令碼本身的變數和函式的變數的作用域問題可能令你費解,在這裡梳理一下這個問題。1 shell指令碼中定義的變數是global的,其作用域從被定義的地方開始,到shell結束或被顯示刪除的地方為止。例1 指令碼變數的作用域 bin bash defi...
Shell中指令碼變數和函式變數的作用域
shell中指令碼變數和函式變數的作用域 在shell中定義函式可以使 模組化,便於復用 不過指令碼本身的變數和函式 的變數的作用域問題可能令你費解,在這裡梳理一下這個問題。1 shell指令碼中定義的變數是global的,其作用域從被定義的地方開始,到shell結束或 被顯示刪除的地方為止。例1 ...