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 · 2814 次点击
    这是一个创建于 1344 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在使用 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   ·   实用小工具   ·   1540 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:17 · PVG 01:17 · LAX 09:17 · JFK 12:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.