Python 中, 这种修改了传入对象的函数, 是否应该用deepcopy, 另外返回一个list ?
大家讲道理
大家讲道理 2017-04-18 10:17:01
[Python讨论组]

2017/2/4

描述

目的是什么

  • 函数是否应该有副作用 ?

  • 是否应该具体情况具体分析

  • 还是总是使用deepcopy, 另外返回 ?

相关代码

  • gist 上的代码片段: https://gist.github.com/hezhi...

上下文环境

  • 产品版本: Python >= 2.7

  • 操作系统: Linux

尝试解决

思考: 之前有看过说, 应该总是返回 deepcopy 之后的可变对象, 不修改原来传入的东西

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
PHPz

函数副作用会给程序设计带来不必要的麻烦,给程序带来十分难以查找的错误,并降低程序的可读性。

如果传入对象是可变的数据类型:
在没有使用deepcopy的程序中,传入对象可能在函数执行之后被修改。函数执行之后如果还有其它地方欲使用该对象,可能造成难以查找的错误。

就个人来说,实践中偏向尽量避免传入可变数据类型,比如传入tuple而不是list,在无法避免的情况下,使用deepcopy。

高洛峰

对于可变的数据类型,[list|dict|set]传参的话,函数中如果要改变它们的值,最好采用deepcopy。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号