您好,登錄后才能下訂單哦!
小編給大家分享一下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 表達式中賦值的原因是這些其他語言中常見的、很難發現的錯誤,是由這個結構引起的:
if (x = 0) { // error handling } else { // code that only works for nonzero x }
錯誤是一個簡單的錯字:x = 0 ,將0賦給變量 x ,而比較 x == 0 肯定是可以預期的。
已經有許多替代方案提案。大多數是為了少打一些字的黑客方案,但使用任意或隱含的語法或關鍵詞,并不符合語言變更提案的簡單標準:它應該直觀地向尚未被介紹到這一概念的人類讀者提供正確的含義。
一個有趣的現象是,大多數有經驗的Python程序員都認識到 while True 的習慣用法,也不太在意是否能在表達式構造中賦值; 只有新人表達了強烈的愿望希望將其添加到語言中。
有一種替代的拼寫方式看起來很有吸引力,但通常不如"while True"解決方案可靠:
line = f.readline() while line: ... # do something with line... line = f.readline()
問題在于,如果你改變主意(例如你想把它改成 sys.stdin.readline() ),如何知道下一行。你必須記住改變程序中的兩個地方 -- 第二次出現隱藏在循環的底部。
最好的方法是使用迭代器,這樣能通過 for 語句來循環遍歷對象。例如 file objects 支持迭代器協議,因此可以簡單地寫成:
for line in f: ... # do something with line...
看完了這篇文章,相信你對Python中不能在表達式中賦值是什么原因有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。