吐槽 Python 的 *args, **kwargs

查看 53|回复 6
作者:justdoit123   
接手一个数据拷贝的任务,在老代码里看到大量 def xxx_fn(*args, **kwargs) 真的血压升高。
这两兄弟里面“什么都有,又什么都没有“,反正全靠猜。
没有注释,就算有注释,随时时间迁移也未必准确。
从最外层到最内层,每一层都有可能往 kwargs 里塞参数或者 pop 参数。
这样的代码心智负担大,理解起来效率低。
这种写法一点也不酷,真的要慎重是用。另外要吐槽,python 社区还有大量这种库(包括官方自带的库),不过幸好质量好一点库都有参数注释,而且(应该是)有持续维护。
我也在思考,为什么各类语言要有那么多酷炫无比的特性?我认为,这些特性大部分是为基础库服务的。上层逻辑代码乱用这种特性,只会给自己找麻烦。
一下省略 “*args, **kwargs“ 个字
ipwx   
因为好的库不用这个,反而 Annotation 用的多。
justdoit123
OP
  
麻蛋,看这种代码感觉自己是在 剥洋葱/捉迷藏。
十年前的 coder 说:“大王,来抓我呀~ ” “我在这,来抓我呀~”。
summerwar   
基础性的方法不限制传入的参数的数量和种类,可以更方便的处理各种数据,十分灵活。如果你要限定传入的参数和内容,那么可以在基础方法的基础上再定义函数和具体化参数。
*args 表示传入的是列表或元祖,*kwargs 传递的是字典,记住这两条就问题不大了,按照这个规则将获取到的参数放入自己的方法里,不在自己方法里的参数直接丢掉就好了。
mark2025   
动态一时爽,维护 xxx 。 动态还是 TS 最爽,兼顾 js 的灵活以及类型保护
shylockhg   
这玩意我只记得以前弄懂过一次,现在又忘完了
iorilu   
python 确实很多地方用这个, 其实主要就是为了兼容未来可能增加得参数, 这样以后
随便传啥, 反正接口不用改
您需要登录后才可以回帖 登录 | 立即注册

返回顶部