咳咳,直接進入正題吧。
自增自減(++/--),以及賦值語句,還有逗號表達式都是在C/C++中常見的運算符或表達式。
熟悉C/C++的小伙伴們都知道,在C/C++中:
自增自減(前綴/后綴)運算符將實現對變量值的 加1/減1; 類似 x = 0; ++x;的語句會使最終 x 的值為1
賦值語句將所賦的值作為該語句的返回值(值傳遞); 類似 (x = func()) > 0; 的語句會將函數 func()的返回值賦給 變量x ,並繼續執行 x > 0的條件判斷語句,這樣的語句在C/C++中顯然是合法且簡潔的
逗號表達式用逗號作為語句間的分隔符,並以最后一個表達式的值作為整個逗號表達式的值; 類似 x = 5, y = 6, x > y;的語句就是一個逗號表達式,先執行x= 5,再執行y= 6,最終比較 x > y結果為 0 ,0就是該逗號表達式的結果
但是!!!
這些!!!
在python里通通無效!!!
先來看第一個實例

注意 ++x 和 --x得到的值均為 x的值 5 ,也就是說++/--並沒有像我們想象的那樣將x 的值+1/-1,這個偽自增自減可真是夠狠的。
而且我們注意到后綴的++/--不僅沒有做出改變,反而還提示語法錯誤
python lady真的讓人琢磨不到頭腦啊
問題先放在這,來看下一個實例

這里我仍然像使用C一樣使用了這一連串的語句,最終判斷 x 的值是否大於0,但是直接報錯 SyntaxError!
可見這一連串的語句並不能正常運行,那么問題出在哪了呢?
緊接着看最后一個實例

顯然我用C的語法在這里寫了一個逗號表達式,逗號表達式中包含了賦值語句
python lady依舊毫不留情的報錯
答案在這里:
1.python中並沒有自增自減運算符,有的只是作為正負號(+/-)的數學符號
所以上例中 ++x 相當於給 x的值取正再取正,而 --x相當於給 x的值取負再取負,自然最后x的值不會發生變化
而我們都知道數學中正負號只能位於數字的前邊,並不能位於數字后面(變成加減號),因此 C里面的后綴++/--在python里面理所應當的報錯啦
看一個例子加深一下理解

怎么樣,這樣就清楚多了吧
2.python中賦值語句采用的引用傳遞方式,而不是值傳遞
也就是 y = x = 5 是正確的,傳遞的是引用,而 y = (x = 5)就是錯誤的
前者屬於python中的鏈式賦值,從左往右,先將y引用對象5,再讓x引用對象5,;
后者由於在python中賦值號從左至右,但括號優先級高,故先讓x引用對象5,而x= 5是沒有返回值的,因此就相當於將一個沒有返回值的結果賦值給y
參考鏈接:https://blog.csdn.net/weixin_34320159/article/details/93577037
3.還記得python中同時賦值的語句嗎?
x,y,z = 3,4,5
這條語句讓x引用3,y引用4,z引用5,;同時賦值要求等號兩邊數目對等。
而在示例語句中 x= 5, y = 6, x < y
將逗號與賦值混合使用,python lady自然先考慮賦值,發現前半段 x = 5, y不對等,直接就報錯
可見在python中並沒有C/C++中的逗號表達式
在python中逗號的作用有2:
a>分隔符,如我們的多個變量同時賦值語句
b>類型轉換,還記得元組中提到的 (5) 與 (5,)的區別嗎?前者類型為 int, 后者類型就是 tuple元組啦
每日精進一點點,加油!
------------------------------------------分隔線-----------------------------------
再補一個python中遇到的小知識
x,y,x = eval(input())
在使用eval()並且同時為 x,y,z三個變量賦值時,輸入格式應用逗號隔開,而不是其他分隔符
---------------------------------------------end-----------------------------------
