习惯了静态类型语言,这两天写 Python ,每个函数开始时都带一坨 assert isinstance ...

2018-08-04 11:19:10 +08:00
 metorm

写的是一个简单的物理仿真计算程序。这算好习惯还是坏习惯? 养成这个习惯是因为有一次被 numpy 的 1x1 数组坑了好久……

5902 次点击
所在节点    Python
35 条回复
orangeade
2018-08-04 11:27:04 +08:00
用 python 3.7
013231
2018-08-04 11:28:51 +08:00
typing 不行吗?
013231
2018-08-04 11:29:04 +08:00
wwqgtxx
2018-08-04 11:57:00 +08:00
@013231 typing 只是起提示作用,类型检查并不是强制的
svenFeng
2018-08-04 12:08:39 +08:00
3.5 之后,可以用 type hint,然后在运行前,用 mypy 检查一遍
xrlin
2018-08-04 12:15:18 +08:00
没办法,动态类型就是这样,动态类型是把双刃剑。
xrlin
2018-08-04 12:16:31 +08:00
我一般用 python 写比较大一点的项目,会加上简单类型说明和比较详细的 docstring。
metorm
2018-08-04 12:22:38 +08:00
@013231 之前只是耳闻。刚才看了一下你发的链接,感觉这个手段入侵性有点强,后面顶不住了再考虑吧……
lihongjie0209
2018-08-04 12:27:31 +08:00
正常操作, 动态语言都这样. 现在又在加 typing 啊什么的, 我 TM 都写类型了,我为什么不用静态语言, 而且这个 typing 还不能保证编译安全, 鸡肋一个
asdf123101
2018-08-04 12:39:11 +08:00
动态语言就是这样的呀,不要用静态的思路去考量动态语言。用动态语言的意义不就是先把应用做出来,把结果跑出来吗。要性能和安全的时候再用 Java,C++就好了。
karllynn
2018-08-04 12:40:32 +08:00
这样会很慢啊…输入输出要按契约编程,写在 docstring 里就可以了
skinny
2018-08-04 12:42:29 +08:00
@lihongjie0209 确实如此,特别是复杂一点的类型还要写一坨代码,唯一有点用的地方是对 IDE 解析友好,代码提示更清晰准确。如果真的非常追求静态类型检查,真的不必用这种方法,换一种语言更好,比如 C#。
lihongjie0209
2018-08-04 12:44:47 +08:00
@skinny #12 动态语言的代码提示基本为 0, 写代码 10 分钟, 查手册看参数和返回值半小时
blacklee
2018-08-04 12:45:02 +08:00
没事,我写 ruby 也是这样。
zhuangzhuang1988
2018-08-04 12:45:15 +08:00
来用 F#吧
爽歪歪。
lihongjie0209
2018-08-04 12:55:44 +08:00
题主问题的本质在于: 对于一个语言的心理定位和现实使用情况不符合.

对于我来说, Python 是 better bash, 只要能写脚本就 OJBK 了, 我不关心:
1. GIL
2. Python3.X, 我现在还在用 Python2.6(CentOS6 自带的)
3. 静态类型

因为这些东西 bash 也没有, 我用 bash 写脚本也不会享受到这些优点.

仿真计算我不懂, 但是在 Python 之前一定有其他软件可以做, 题主应该更关注于 Python 带给了你什么优势, 而不是它和 xxx 语言相比有什么劣势.

脚本语言的命, 别操着静态工程语言的心.
Trim21
2018-08-04 12:56:49 +08:00
@lihongjie0209 用了 typing 之后 pycharm 的自动补全还是挺爽的,如果库作者相应的 doc string 里写明了参数类型和返回值也能进行类似的参数推导
lihongjie0209
2018-08-04 13:01:29 +08:00
@Trim21 #17 给你返回一个 map, tuple 你怎么做自动补全, 怎么知道返回值中到底有什么? Python 的问题是脚本语言的灵活性给程序员带来了偷懒的机会, 返回 map 最简单, 但是后续的维护太难做.
orangeade
2018-08-04 13:13:56 +08:00
@lihongjie0209 #9 你 Java 干嘛加 var 类型推导呢 好好地手写不就行了
fancyhan
2018-08-04 13:18:08 +08:00
如果做科学计算,还是 fall fast 比较好,我觉得可以

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

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

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

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

© 2021 V2EX