使就地 *** 作返回对象不是一个好主意吗?

使就地 *** 作返回对象不是一个好主意吗?,第1张

使就地 *** 作返回对象不是一个好主意吗?

是的,这是一个坏主意。原因是,如果就地 *** 作和非就地 *** 作具有明显相同的输出,那么程序员将经常混淆就地 *** 作和非就地 *** 作(

List.sort()
vs.
sorted()
),从而导致难以检测错误。

返回自身的就地 *** 作可以允许您执行“方法链接”,但是,这是不好的做法,因为您可能会将带有副作用的函数偶然地埋在链的中间。

为防止此类错误,方法链应只具有一种具有副作用的方法,并且该功能应位于链的末尾。链中位于此之前的函数应该转换输入而没有副作用(例如,导航树,切片字符串等)。如果就地 *** 作返回了自己,那么程序员必然会意外地使用它来代替替代函数,该替代函数返回一个副本,因此没有副作用(再次是

List.sort()
vs
sorted()
),这可能会导致难以调试的错误。

这就是Python标准库函数总是返回副本或

None
就地返回并修改对象,而从不就地修改对象并返回自身的原因。其他Python库(例如Django)也遵循这种做法(请参见有关Django的非常相似的问题)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5647957.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存