使用强类型的编程语言是否更有利于编程和数据分析? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
xpde
V2EX    Python

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

  •  
  •   xpde 2021-03-20 19:44:07 +08:00 3192 次点击
    这是一个创建于 1667 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    第一层比较浅的,是你指定关键位置的特定类型,满足两个最小目标,其一是 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
        17
    gnef  
       2021-03-22 16:11:33 +08:00
    @LeeReamond Python 某种意义上不就是全程 Object 的 Java 吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     910 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:52 PVG 02:52 LAX 11:52 JFK 14:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86