是的,这是一个坏主意。原因是,如果就地 *** 作和非就地 *** 作具有明显相同的输出,那么程序员将经常混淆就地 *** 作和非就地 *** 作(
List.sort()vs.
sorted()),从而导致难以检测错误。
返回自身的就地 *** 作可以允许您执行“方法链接”,但是,这是不好的做法,因为您可能会将带有副作用的函数偶然地埋在链的中间。
为防止此类错误,方法链应只具有一种具有副作用的方法,并且该功能应位于链的末尾。链中位于此之前的函数应该转换输入而没有副作用(例如,导航树,切片字符串等)。如果就地 *** 作返回了自己,那么程序员必然会意外地使用它来代替替代函数,该替代函数返回一个副本,因此没有副作用(再次是
List.sort()vs
sorted()),这可能会导致难以调试的错误。
这就是Python标准库函数总是返回副本或
None就地返回并修改对象,而从不就地修改对象并返回自身的原因。其他Python库(例如Django)也遵循这种做法(请参见有关Django的非常相似的问题)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)