python可以利用等式對多個變數同時賦值,如:a, b, c = 1, 2, 3
。利用這個特性可以很簡潔的寫出變數交換的**:
a =
1b =
2a, b = b, a
執行上述**後 a=2,b =1。這樣就快速的完成了a,b變數之間的交換。
下面解釋**執行過程:
上述**執行到第三行,先計算等式右邊的b值,等式邊為:a, b = 2, a
。
然後再計算等式右邊的a值,等式邊為:a, b = 2, 1
。
按從左到右的順序對a, b 進行賦值計算,將a值邊為2。
按從左到右的順序對a, b 進行賦值計算,將b值邊為1。
看到這記住上述結論即可,下面的驗證過程有耐心就接著看。
驗證**如下:
defa(
):print
('a'
)return
1defb(
):print
('b'
)return
2defc(
):print
('c'
)return
3x, y, z =0,
0,0x, y, z = a(
), b(
), c(
)print
(x, y, z)
#---------------------------
#**執行結果為:
# a# b
# c# 1 2 3
由此可以看出,運算順序是:先執行的是等式右邊的表示式計算 按從左到右的順序 執行等式右邊的**。
接著證明賦值的操作也是按從左到右的順序執行:
# -*- coding:utf-8 -*-
class
listnode
:def
__init__
(self, x)
: self.val = x
self.
next
=none
class
solution
:def
reverselist
(self, head: listnode)
-> listnode:
ifnot head:
return
none
before =
none
while head:
# head, before, head.next = head.next, head, before error
# head.next, before, head = before, head, head.next right
# head.next, head, before = before, head.next, head right
# head, head.next, before = head.next, before, head error
try:
print
(head.val)
print
(head.
next
.val)
print
(before.val)
except
:pass
head.
next
, before, head = before, head, head.
next
try:
print
(head.val)
print
(head.
next
.val)
print
(before.val)
except
:pass
return before
# 新建鍊錶
lst =
[listnode(1)
, listnode(2)
, listnode(3)
, listnode(4)
, listnode(5)
]for i in
range
(len
(lst)-1
):lst[i]
.next
= lst[i+1]
obj = solution(
)a = obj.reverselist(lst[0]
)print
(a.val)
這段**是反轉鍊錶的**,即將鍊錶1->2->3->4->5 反轉為鍊錶 5->4->3->2->1。head.next, before, head = before, head, head.next
這行**的寫法有**中注釋裡列出的4種寫法。其中,1、4兩種寫法執行後報錯,2、3兩種寫法執行後正確。原因在於賦值的過程是按從左到右的順序執行的。
以head, before, head.next = head.next, head, before
報錯的**為例:
程式開始,head指向第乙個節點 1 。
先對head執行賦值操作,head更新後指向節點 2 。
再對head.next執行賦值操作,此時head.next 等價於 節點 2 -> next 。這行**的本意是 更新 節點 1 ->next 的值。
因此這行**執行後報錯。
只有當head.next 賦值 操作 在 head 之前,**才正常執行(2、3兩種寫法)。
由此證明,賦值操作順序也是按從左到右執行。
python 同時給多個變數賦值
python中可以同時給多個變數賦值,下面列舉了三種方法 assign values directly a,b 0,1 assert a 0 assert b 1 assign values from a list r,g,b red green blue assert r red assert g...
Golang 多個變數同時賦值
程式設計最簡單的演算法之一,莫過於變數交換。交換變數的常見演算法需要乙個中間變數進行變數的臨時儲存。用傳統方法編寫變數交換 如下 var a int 100 var b int 200 var t int t a a b b t fmt.println a,b 在計算機剛發明時,記憶體非常 精貴 這...
宣告變數 如果同時宣告多個變數
如果同時宣告多個變數,可以用以下語句 也可以按如下宣告 dim a as integer,b as integer,c as integer但是不可以按如下宣告 dim a,b,c as integer 如果這樣操作,僅有c宣告正確。如何檢查是否宣告成功呢?可以使用typename函式來判斷。msg...