作者zerof (猫橘毛发呆雕像)
看板Python
标题Re: [问题] +=问题
时间Tue May 16 12:51:14 2017
前文 43
1F:→ bibo9901: 其实像C,C++,C#那样其实会造成更多坑 05/15 23:29
2F:→ bibo9901: 例如 a += b += c 到底谁先谁後? a += b += a ? 05/15 23:30
3F:推 tsoahans: 有点好奇在C#这会是list[12]还是list[13]? 05/16 08:45
4F:→ uranusjr: a += b 会直接被展开成 a = a + b, 然後 assignment 05/16 08:58
5F:→ uranusjr: expression 会回传左值, 所以上面的结果对等於 list[13] 05/16 08:59
6F:→ 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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 192.19.253.250
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1494910279.A.8D9.html