def swap( a, b ): t = a a = b b = t #>>> a = 1 #>>> b = 2 #>>> swap( a, b) #>>> a,b #>>> (1,2) # 沒變
要怎麼樣才能讓兩個變數做swap的動作呢?其實很簡單:
a = 1 b = 2 a, b = b, a #>>> a, b #>>> (2,1)
這樣就可以了,夠easy了吧,因為Python會先將右邊的b,a create成一個新的tuple變數,然後再assign給左邊原本的變數a跟b。
要把它寫成function也行:
def swap( a, b ): return b, a
6 則留言:
第一段code
def swap( a, b ):
t = a
a = b
b = a
b = a 改寫成 b = t 不是swap了?
還是我有漏掉概念?
懇請指教,感謝。
抱歉,這是我的筆誤,應該要改成b=t才是c/c++裡的寫法。
但是,這樣子的寫法在Python裡還是不work的,在swap()結束前a,b的值的確已經對調,但是一離開function後,a, b的值還是原本的值。因為swap()裡面的a, b只是reference到外面的a, b的"新變數",所以最後swap只會改變到swap內的a, b,而改不到function外面的a, b
def swap1(a, b):
t = a
a = b
b = t
return a, b
就可以了吧XD
林方傑:
def swap(x, y):
t = x
x = y
y = t
return x, y
a = 1
b = 2
swap(a, b)
print(a, b)
我寫這個樣子
一樣沒有交換
數值、字串、tuple(序對) => 傳值呼叫
串列、集合、字典 => 傳址呼叫
也可以這樣使用
def swap(x):
temp = x[0]
x[0] = x[1]
x[1] = temp
list1 = [1, 2]
swap(list1)
print(list1) #output = [2, 1]
因為你 swap(a, b) 產生的 (x, y) 沒有東西接,當然不會交換
把該行改成 a, b = swap(a, b) 就會 work 了,不過有點脫褲子放屁,而且還不好讀
張貼留言