一、傳值呼叫:
函數內所使用的變數稱為區域變數,所以從外部變數傳值給函數,經函數內部程式計算後改變了變數的數值,也不會改變外部變數的數值,因為區域內變數的改變只在函數內變化而已,不影響到外部的變數。
如:
def calc(a,b):
s = a + b
d = a - b
a = s
b = d
a = 22
b = 15
print("執行前: a,b = ",a,",",b)
calc(a,b)
print("執行後: a,b = ",a,",",b)
▼ 程式執行結果 ..
執行前: a , b = 22 , 15
執行後: a , b = 22 , 15
從以上執行前後結果可以看出,使用傳值呼叫函式並不會影響外部變數的數值,只有函式內的區域變數才會改變。
二、傳址呼叫:
如果改使用變數的位址來傳遞數值給函式,經函式內程式計算後改變了變數位址內的數值,不論是函式的內、外部變數皆會同步改變,這是因為改變數值並不是變數本身,而是改變了變數位址裡面的數值。
如:
def calc(a):
s = a[0] + a[1]
d = a[0] - a[1]
a[0] = s
a[1] = d
a = [22,15]
print("執行前: a = ",a)
calc(a)
print("執行後: a = ",a)
▼ 執行結果 ..
執行前: a = [22, 15]
執行後: a = [37, 7]
從以上傳址呼叫函式程式可以知道,使用變數位址傳遞資料給函式使用,則不論函式的內外部變數就會同步改變,這是寫程式的人需要特別留意的地方。
沒有留言:
張貼留言