吐槽 Python 的 *args, **kwargs

5 天前
 justdoit123
接手一个数据拷贝的任务,在老代码里看到大量 def xxx_fn(*args, **kwargs) 真的血压升高。

这两兄弟里面“什么都有,又什么都没有“,反正全靠猜。

没有注释,就算有注释,随时时间迁移也未必准确。

从最外层到最内层,每一层都有可能往 kwargs 里塞参数或者 pop 参数。

这样的代码心智负担大,理解起来效率低。

这种写法一点也不酷,真的要慎重是用。另外要吐槽,python 社区还有大量这种库(包括官方自带的库),不过幸好质量好一点库都有参数注释,而且(应该是)有持续维护。


我也在思考,为什么各类语言要有那么多酷炫无比的特性?我认为,这些特性大部分是为基础库服务的。上层逻辑代码乱用这种特性,只会给自己找麻烦。


一下省略 “*args, **kwargs“ 个字
3163 次点击
所在节点    Python
48 条回复
vialon17
4 天前
滥用想想都脑壳大,没有类型注释不麻烦吗?
uni
4 天前
直接在 linter 里面禁用这些东西
每次跟别人合作 py 代码我都会要求他们把 vscode 的 py 类型检查(默认是关闭的)打开,他们可以不改但是编辑器报满屏都是红色的他们要能看到
chashao
4 天前
这个真他妈恶心,重构火葬场
ipwx
4 天前
@lolizeppelin 啊哈哈哈,大概是因为我喜欢在没人回复的帖子下面先回复,如果有很多回复的帖子我反而不会回复也不会看回复吧。所以你经常在前几楼看见我,其实我水的不多。
lyxxxh2
4 天前
```
def init_tracker(self, *args):
self.tracker = CashTracker(*args)
return self
```
参数多了,挺方便啊。
Rehtt
3 天前
@CodeCodeStudy 1.18 以后就有了
// any is an alias for interface{} and is equivalent to interface{} in all ways.
type any = interface{}
CodeCodeStudy
3 天前
@qW7bo2FbzbC0 38
@Rehtt #46
感谢指出,有一段时间没看 golang 了
xiebow
1 天前
@mywaiting 确实

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1078986

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX