溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python中不能在表達式中賦值是什么原因

發(fā)布時間:2020-06-24 17:20:14 來源:億速云 閱讀:1109 作者:清晨 欄目:編程語言

小編給大家分享一下Python中不能在表達式中賦值是什么原因,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討方法吧!

為什么Python不能在表達式中賦值?

許多習慣于C或Perl的人抱怨,他們想要使用C 的這個特性:

while (line = readline(f)) {
    // do something with line
}

但在Python中被強制寫成這樣:

while True:
    line = f.readline()
    if not line:
        break
    ...  # do something with line

不允許在 Python 表達式中賦值的原因是這些其他語言中常見的、很難發(fā)現(xiàn)的錯誤,是由這個結(jié)構(gòu)引起的:

if (x = 0) {
    // error handling
}
else {
    // code that only works for nonzero x
}

錯誤是一個簡單的錯字:x = 0 ,將0賦給變量 x ,而比較 x == 0 肯定是可以預(yù)期的。

已經(jīng)有許多替代方案提案。大多數(shù)是為了少打一些字的黑客方案,但使用任意或隱含的語法或關(guān)鍵詞,并不符合語言變更提案的簡單標準:它應(yīng)該直觀地向尚未被介紹到這一概念的人類讀者提供正確的含義。

一個有趣的現(xiàn)象是,大多數(shù)有經(jīng)驗的Python程序員都認識到 while True 的習慣用法,也不太在意是否能在表達式構(gòu)造中賦值; 只有新人表達了強烈的愿望希望將其添加到語言中。

有一種替代的拼寫方式看起來很有吸引力,但通常不如"while True"解決方案可靠:

line = f.readline()
while line:
    ...  # do something with line...
    line = f.readline()

問題在于,如果你改變主意(例如你想把它改成 sys.stdin.readline() ),如何知道下一行。你必須記住改變程序中的兩個地方 -- 第二次出現(xiàn)隱藏在循環(huán)的底部。

最好的方法是使用迭代器,這樣能通過 for 語句來循環(huán)遍歷對象。例如 file objects 支持迭代器協(xié)議,因此可以簡單地寫成:

for line in f:
    ...  # do something with line...

看完了這篇文章,相信你對Python中不能在表達式中賦值是什么原因有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI