使用强类型的编程语言是否更有利于编程和数据分析?

2021-03-20 19:44:07 +08:00
 xpde

在使用 python 编程写项目、做数据分析和深度学习任务的过程中感觉如果可以把 python 这样的语言设计成为强类型的语言。 在各种使用 import 各种第三方库时可以更准确地给出 api 的提示,同时也不再依赖于类库开发者的源码注释,就可了解需要传哪些参数进去。在写代码的时候也能防止类型不匹配的 bug 出现。 v 友们有没有这种感觉呢?

2797 次点击
所在节点    Python
17 条回复
ipwx
2021-03-20 19:55:08 +08:00
你需要 type annotation + pycharm 这种 ide 。在写代码的时候得到的体验和强类型语言没啥区别。
secondwtq
2021-03-20 19:55:18 +08:00
可是 Python 本来(一般来说)就是强类型的啊 ...
xiri
2021-03-20 19:59:33 +08:00
Python 本来就是强类型语言啊,反而 C 语言是弱类型的,,,,
你是不是把动态、静态和强、弱类型搞混了
iConnect
2021-03-20 20:00:06 +08:00
动态类型、强类型 ,应该是不一样的概念
zjsxwc
2021-03-20 20:07:26 +08:00
python 本来就是强类型
xpde
2021-03-20 20:14:06 +08:00
更正一下,是动态类型,本人突发奇想,没仔细检查搞混了
Jirajine
2021-03-20 20:21:51 +08:00
typehint + pylance
zjsxwc
2021-03-20 20:29:21 +08:00
可能楼主找到是 nim 语言,静态强类型,又像 python
jones2000
2021-03-20 21:44:18 +08:00
感觉楼主你要的不是编程, 是需要一个强大的插件, 你只要调参就可以了。 什么数据格式,数据导入,模型选择等等全部插件自动识别搞定,自己输入参数就能出结果。
xpde
2021-03-20 21:52:23 +08:00
@jones2000 哈哈,没懒到那个程度,自己还是写过不少工具软件的。去年主要在写 java,始终有上面的想法罢了
ipwx
2021-03-20 21:58:42 +08:00
@xpde 所以用 type annotation + pycharm 不就行了嘛
xpde
2021-03-20 22:24:16 +08:00
@ipwx 针对没有使用 type annotation 的第三方库,只能针对自己写的那部分做类型申明,还是不太完美😂
cmdOptionKana
2021-03-20 23:05:10 +08:00
@xpde 假设真的有人做出了一个强制静态类型的 python (以下称为 staticPy),那么,这个 staticPy 能使用普通 python 的第三方库吗?

如果可以:那么普通 python 库如果就是你说的 “没有使用 type annotation 的第三方库”,那它怎样变成 staticPy ?

如果不行:那么意味着全部第三方库都需要重写,岂不是比目前的 type annotation 更麻烦?
no1xsyzy
2021-03-20 23:14:09 +08:00
动态类型还仅仅指“变量的类型需要运行时才能确定”
我记得数据分析这块有几个库甚至依赖于“类型的构成需要运行时才能确定”
echowuhao
2021-03-20 23:41:44 +08:00
f#
LeeReamond
2021-03-22 08:32:35 +08:00
楼主说的应该是静态类型。不过静态类型也有几种程度的静态类型,

第一层比较浅的,是你指定关键位置的特定类型,满足两个最小目标,其一是 runtime 可以动态检查是否所有输入都满足该类型,其二是使用 IDE 可以看到提示。这个就是目前 python 使用的方案,虽然 runtime 检查没有杀手级产品,mypy 并不好用,不过仅满足项目需求的侵入式检查框架自己实现成本也不太大,而 IDE 补全在 pycharm 里已经有,虽然对 sublime 用户并不友好,但总体来说堪用。

第二层完全静态,对于 python 是愚蠢且无意义的,动态是一项伟大的发明,这是动态语言后发但能逐渐蚕食静态类型语言的原因,因为它确实解决了静态的痛点。python 的设计哲学是高动态与强大的描述能力,对比 c++的哲学( Zero-Overhead Abstraction )可以明显感受到本质不同。别的不说,假如存在静态 python,它有良好的优化空间和高速的 JIT 解释器,但写代码时不是光标注`lst: list`就完事了,大多数时候你还要标注数组中储存对象的类型,比如`lst: list[int]`,从此以后你只能往 list 里面增加 int 类型,甚至无法添加 float 。你能接受吗?如果如此为什么我不使用其他语言?
gnef
2021-03-22 16:11:33 +08:00
@LeeReamond Python 某种意义上不就是全程 Object 的 Java 吗?

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

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

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

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

© 2021 V2EX