我对导致这种情况的思维过程感兴趣.对我来说,一个相对新手,似乎阻碍了,因为它阻止了列表处理的"链接"(例如mylist.reverse().append('a string')[:someLimit]).我想可能是"那些人的力量"决定列表理解是一个更好的范例(一个有效的观点),所以不想鼓励其他方法 - 但是这似乎有悖常理,以防止一种直观的方法,即使更好存在替代品.
请注意,我不是在抱怨(我敢肯定有是一个合理的理由,我在它是什么只是感兴趣!),也不是寻找一个解决方案(意见在这里非常具有启发性) -只是寻找一些情况下,并深入理解语言的设计过程.
Jon*_*nts 10
Python中的一般设计原则是用于就地改变对象以返回None的函数.我不确定它会不会是我选择的设计选择,但它基本上是为了强调不返回新对象... GvR(我们的Python BDFL)在这里陈述了设计选择:http:// mail .python.org/pipermail /蟒蛇-dev /目录2003 - 10月/ 038855.html
我不能代表开发人员,但我发现这种行为非常直观.
如果一个方法对原始对象起作用并就地修改它,它就不会返回任何内容,因为没有新的信息 - 你显然已经引用了(现在已经变异的)对象,为什么要再次返回呢?
但是,如果方法或函数创建了一个新对象,那么它当然必须返回它.
所以l.reverse()没有返回值(因为现在名单已经逆转,但identfier l仍指向该列表),但reversed(l)必须返回新生成的列表中,因为l仍指向旧的,未经修改的列表.
编辑:我刚刚从另一个答案中了解到这个原理叫做Command-Query分离.
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |