本節主要學習Python的函數是如何同時返回多個值的問題。
在學習Python的時候驚奇的發現,Python的函數可以同時返回多個值,很有意思。
#define function sum
def sum(x, y):
z = x + y
x = x ^ y
y = x ^ y
x = x ^ y
return z, x, y
#define function main
def main():
a = int(raw_input("plz input a "))
b = int(raw_input("plz input b "))
c = sum(a, b)
print(c)
#entry of programme
main()
plz input a 12
plz input b 13
(25, 13, 12)
結果裏(25,13,12)這個看上去很奇怪,這是Python裏的tuple(元組),新名詞,沒關係我們後邊將list時會提及。在子函數sum裏,除了求和(第3行)之外還有交換x和y的值的運算操作(第4~6行),返回z、x、y(第7行)給main函數的c(第13行)的打印結果(第14行)來看,確實x和y交換了值。
那main函數裏的a和b有變化麼?a還是12,b還是13麼?我們在main函數裏在print(c)(第14行)之後增加兩條打印語句,分別打印a和b的值(第15、16行),看看a和b變了沒?
#define function sum
def sum(x, y):
z = x + y
x = x ^ y
y = x ^ y
x = x ^ y
return z, x, y
#define function main
def main():
a = int(raw_input("plz input a "))
b = int(raw_input("plz input b "))
c = sum(a, b)
print(c)
print(a)
print(b)
#entry of programme
main()
運行結果
plz input a 12
plz input b 13
(25, 13, 12)
12
13
調用sum函數時,將a和b的值傳遞一份給x和y(a和x都指向12所在數據單元)(b和y都指向13所在數據單元),在sum函數裏x和y通過交換操作,改變了執行x和y指向的數據單元。