Re: [問題] +=問題

作者: zerof (貓橘毛發呆雕像)   2017-05-16 12:51:14
前文 43
→ bibo9901: 其實像C,C++,C#那樣其實會造成更多坑 05/15 23:29
→ bibo9901: 例如 a += b += c 到底誰先誰後? a += b += a ? 05/15 23:30
推 tsoahans: 有點好奇在C#這會是list[12]還是list[13]? 05/16 08:45
→ uranusjr: a += b 會直接被展開成 a = a + b, 然後 assignment 05/16 08:58
→ uranusjr: expression 會回傳左值, 所以上面的結果對等於 list[13] 05/16 08:59
→ uranusjr: += 其實算簡單, Python 的 assignment 不回傳值反而特殊 05/16 09:00
in-place 的 method 是可以回傳原值的,只要重載 += 的 protocol __iadd__ 的
時候 return self 就可以了。((但我回文不是為了講這個...
在 OOP 裡,這被稱為 Method chaining (in-place 修改完後會回傳原值是因為這
個 idiom), Python 雖然也是 OOP 語言,但 Guido 對於這個 idiom 有不同的立
場(註1),所以 in-place 在 Python 的實作基本上都是回傳 None 。
註:
1. https://mail.python.org/pipermail/python-dev/2003-October/038855.html
2. 開始學 FP 之後變得蠻認同這點的。除了可讀性較高外,這跟 explict self
一樣具有提醒的作用。明確的考量 mutable/immutable 跟 side-effect 比起
方便的 method chaining 來得優雅許多。((個人意見QQ
作者: bibo9901 (function(){})()   2016-05-15 23:29:00
其實像C,C++,C#那樣其實會造成更多坑例如 a += b += c 到底誰先誰後? a += b += a ?
作者: tsoahans (ㄎㄎ)   2016-05-16 08:45:00
有點好奇在C#這會是list[12]還是list[13]?
作者: uranusjr (←這人是超級笨蛋)   2016-05-16 08:58:00
a += b 會直接被展開成 a = a + b, 然後 assignmentexpression 會回傳左值, 所以上面的結果對等於 list[13]+= 其實算簡單, Python 的 assignment 不回傳值反而特殊

Links booklink

Contact Us: admin [ a t ] ucptt.com