查看: 3151| 回复: 12
收起左侧

请教python 做工程项目的建议

meteorss | 显示全部楼层
👋 1
本楼:   👍  1
100%
0%
0   👎
全局:   41
98%
2%
1

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x

最近换了组,从Java 换到 Python,感觉Python 很多语法特性非常不利于开发 稍大点的工程项目,相比之下Java 简直是天选大型项目开发语言,不知道是我对Python 不熟导致,还是Python 确实不适合,请各位Python前辈指教:

  • Python的动态类型,导致很难但从code判断出变量类型;甚至IDE 都没法 从一个方法的调用 跳转到 方法的定义,因为无法静态推断出是变量所属的class;另外 有些code里同一个变量也会在不同的时候出现不同的类型。总感觉这个设置,或许对用户使用有方便,但对开发者很不友好,容易出bug。很多第三方库 doc 里也很少写显式的声明具体的参数或返回值类型。虽然有type hint,但是身边大部分库并没有采用
  • Python的一些类的语法,感觉对OOP 并不友好,比如不区分 private/package/protected/public,不支持函数 override,不支持constructor override,导致很多design pattern 难以实现,或者函数的参数过于复杂
  • Python 的 包的管理也有些欠缺,比如Java 里 第一行就是所在的package的名称,一目了然,但到了Python,打开一个文件,都不知道它属于哪个package。
  • Python 的第三方库的doc,似乎也很难follow,比如方法中常见的参数kwargs,很多doc里并不会说明包含哪些参数,只能找到对应的src code 去看
  • 最后是一点没有佐证的感觉:相比Java,似乎Python 更容易出现不同dependency之间的version conflict,比如package-A 的1.1 只能和package-B的 2.1 合用(或许是开发并不follow OOD principal导致的?)



说了这么多,并不是为了吐槽Python,Python在脚本,数据处理,小规模程序,prototype开发中还是很好用的,但一旦code 复杂起来,感觉混乱度指数上升。不知道各位怎么看?有什么python engineering best practise的建议?

上一篇:有在Outlier接过活的吗,公司需要做一些关于code labeling的有偿访谈
下一篇:SQL的几个rank需要搞清楚
beetle 2024-12-6 20:30:26 来自APP | 显示全部楼层
本楼:   👍  2
100%
0%
0   👎
全局:   25895
91%
9%
2638
Python 最奇葩的是Not Backwards Compatible

回复

使用道具 举报

meglory 2024-12-6 08:30:27 来自APP | 显示全部楼层
本楼:   👍  2
100%
0%
0   👎
全局:   517
97%
3%
18
java很多设计模式到python是完全不需要的

oop确实缺很多东西 需要你们自己内部的best practice加convention来解决

不适合做大项目是个伪命题,太多反例了

要起python online service确实硬伤挺多 所以多数时候只会offload ml/llm 相关的逻辑 剩下的用go Java rust etc.
回复

使用道具 举报

kirska 2024-12-6 19:37:26 | 显示全部楼层
本楼:   👍  1
100%
0%
0   👎
全局:   2666
97%
3%
74
Python你感受一下List里面的对象类型可能都不一样,甚至偶尔有个None是什么感受。。。导致如果一个list被反复在各种奇奇怪怪的地方append东西,iterate的时候总得查一查是不是None。。。不然是不是就会有惊喜。
回复

使用道具 举报

AhhhhHaaaa 2024-12-6 07:43:39 来自APP | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   3
100%
0%
0
跟帖看看後續。
我是很普通的Python developer OOP也寫不好,向來就是能逃就逃
回复

使用道具 举报

meglory 2024-12-6 08:26:07 来自APP | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   517
97%
3%
18
这些每一条都是有解决办法的,就是需要额外花功夫
回复

使用道具 举报

eldlm 2024-12-6 09:19:08 来自APP | 显示全部楼层
本楼:   👍  1
100%
0%
0   👎
全局:   1038
98%
2%
23
Java: Python is such a toy language that it can't apply design patterns.
Python: Java is so poorly designed that it can't write code without design patterns.
回复

使用道具 举报

 楼主| meteorss 2024-12-6 09:34:04 来自APP | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   41
98%
2%
1
meglory 发表于 2024-12-05 16:26:07
这些每一条都是有解决办法的,就是需要额外花功夫
能详细说一下 怎么解决吗?
回复

使用道具 举报

肥颓 2024-12-6 13:21:26 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   4565
97%
3%
128
python 其实是有lint 的,你可以考虑用一下
debug 的话你得不断的打assert 保证不会“恰好能跑”
我debug 的时候基本上就是不断的raise exception 和assert 来判断
回复

使用道具 举报

yseLong 2024-12-6 19:42:22 来自APP | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   356
84%
16%
66
用 pydantic
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

Advertisement
>
快速回复 返回顶部 返回列表