[可能引战] 用过 Python 也没法理解为什么 Python 是个好语言

2019-06-30 11:28:09 +08:00
 noli
看完标题请先冷静。

Python 除了标准库功能多来源繁杂,好像并没有什么可取之处。
毕竟真实项目中也不太可能只用标准库解决问题。

GIL 简直反进化
静态类型但是变量类型是可以重新绑定的……

求一个我没有想到的 Python 的优点
14510 次点击
所在节点    Python
172 条回复
oblivious
2019-06-30 12:46:23 +08:00
Python 的一个优点就是:极大的简化了不需要开发项目的研究人员编程的学习曲线。

以前的科研人员:设计一个算法,Pascal,C 实现,然后另外的科研人员花一周时间学会如何调用,如何修改代码换一个小小的功能。

现在的科研人员:花 6h 时间直接学会 py 所有基础功能,然后可以开心的魔改各种别人的代码了。
Takamine
2019-06-30 12:52:00 +08:00
没有大括号,一个标尺解决问题的语言还不够好吗。:doge:
janxin
2019-06-30 13:07:29 +08:00
@kxiaong 不不不,2019 年了,应该会在明年绕开 GIL (支持多虚拟机在单进程中运行

具体请参考:
peps/pep-0554/
pythoncapi.readthedocs.io/runtime.html

作为纯社区支持,确实已经很不容易了,看看隔壁 pypy 那可怜的...
ch3nOr
2019-06-30 13:17:17 +08:00
@littlewing
但是 Python 是强类型的啊
FrankHB
2019-06-30 13:37:56 +08:00
@Takamine 一样得被 PEP-8 教做人。
Osk
2019-06-30 13:40:27 +08:00
python 不是动态强类型吗???
noli
2019-06-30 14:03:03 +08:00
@Wincer #1

莫要激动,一时笔误打错了,是强类型和动态类型。
numpy 其他很多语言也有替代品啊,虽然可能不太为科学界所知悉。
numpy 运算效率很搞吗,浮点运算能力能搞得过显卡吗?


@Vegetable #2

容易让新手入门是个好的优点,是 python 的哪个特性让它易于入门呢?
至于开发速度快这个,恐怕也是见仁见智,因项目不同的吧?

@Mohanson #3

我也写过寄存器式虚拟机。最难解决的问题是执行效率。
用 python 写有什么优势吗?
secondwtq
2019-06-30 14:18:17 +08:00
@noli numpy 是一个软件,GPU 是一种硬件,你既然写过虚拟机应该知道这俩是没法拿来比的

我的理解一般把 Python 当成“好语言”的人,并不会对自己所使用的语言特别认真,也就是说换成 PHP 他们也会说“好语言”,此类群体一般会持类似“能解决问题的语言就是好语言”“语言最重要的是生态和背后的爹”之类观点

之所以现在吹 Python 的比吹 PHP、Ruby 之类的多,因为 Python 的适用范围比 PHP 广,智商兼容性比 Ruby 高
Vegetable
2019-06-30 14:22:45 +08:00
@noli #27

作为动态类型,没有类型声明,代码精炼,语义化更好,更接近伪代码,实际上就是更接近自然语言.
关键字比如关系运算采用 and or not 而不是&&||!这种符号也更容易理解.
多范式支持,初学者不需要学会定义函数,就可以完成一些简单的工作.学习过程更平滑.
环境简单,傻瓜式安装,不需要配置,新手可以下载安装包就可以直接从交互式环境开始.

开发速度快就是快吧,我觉得没什么可讨论的,在脚本语言里肯定不是最优秀的,leetcode 感受比较深,只有 python 是最适合刷题目的.更能专注于问题本身,其他的语言哪怕再熟练也不得不多写很多字.
mywaiting
2019-06-30 14:24:08 +08:00
除了 GIL,以及 GIL 导致的性能低下问题,我觉得 Python 没有太多可以喷的地方

什么动态类型、什么限制缩进,感觉这些都没有喷对地方,难道你写其他语言不缩进?

要说 Python 最大的好处,就是这语言几乎不限制你的表达,怎么喜欢怎么来
FrankHB
2019-06-30 14:34:02 +08:00
@noli 大部分情况下打得过 Fortran 就够用了,不用考虑硬件问题。

关于 Python 容易入门的说法好像从来就没看到有正式的 PL 研究提过,所以可能只是大众迷因,和“ PHP 是最好的语言”类似。

实际具体点的原因大概是,和 C++之类的比起来,Python 看起来似乎是没那么坑,不需要之前有其它语言的丰富经验,于是“被简单”了。如果这些用户已经足够了解了其它语言,可能就不会有这样的想法。对不以 Python 也不以比 Python 明显复杂的语言作为入门的用户来讲,看样子也普遍不觉得 Python 简单。

Quora 上有人问“ Is Python an easy language to learn ”,下面有回答总结了不少,但其实多数是其它高级的动态语言也具备的。唯独“ designed to be English like ”,我看来是寅吃卯粮,因为实际上并不 English-like (真刻意 English-like 的设计都挺烂的,因为说实话 English 拿来应付表达算法之类的目的就不咋地……),这是把理解的复杂度扔给之后倒腾了。

还有就是 @secondwtq 暗示的从众。不过其实细讲起来 Python 并没有个好爹( GvR 设计水平不咋地而且作为 dictator 都搞砸了不少事情),而且流行起来也相当偶然了。
charlie21
2019-06-30 14:39:10 +08:00
某某语言 是给那些驾驭不了 xxxx 的人用的,比如 科研人员、数据科学家

修玩具四驱车就用四驱车工具箱就可以了。你拜的是三一重工、三菱重工,他拜的是奥迪双钻

python 奥迪双钻 你的伙伴

你不能指望拿一个四驱车工具箱去修理南京长江大桥吧

-
charlie21
2019-06-30 14:43:06 +08:00
也不是说 python 不好
玩玩可以,别耽误了正途 ( C++, C, Java, C# ) 。你一个高级工程师 业余爱好喜欢玩四驱车 也可以。但你不能说 你就是一个专业玩四驱车的,你就是高级工程师了
liprais
2019-06-30 14:44:07 +08:00
面向对象一坨屎,缩进是语法的一部分,还有那精神分裂的 api 设计,更别提那包分发机制,这语言哪里好了.....
FrankHB
2019-06-30 14:46:23 +08:00
@mywaiting 你觉得是你觉得,不表示别人觉得的就没问题了。

所谓的动态类型我不喷(反过来我还要喷所谓的“静态”本身,或者强调“静态”的 Robert Harper 流的扯蛋)所以略过。

限制缩进首先是对用户选择的冒犯。用户会缩进不表示语言设计者替用户选择就是道德上正当的,撑死这也就是一部分人的选择。加上 free form 和决定如何缩进一贯是历史传统上的用户权利,突然就收归 GvR 之流所有了?敢限制自然就得准备好被喷。

更进一步地,如 PEP-8 这样钦定缩进用空格的,我可以认为是分不清缩进和对齐程度的反智。(不过这是另一回事了——缩进用不用空格的显然不是 Python 独家问题。)

其次,限制缩进是对语言理论(形式系统意义上的“理论”,反映到工程上主要是语言 spec 的表现形式)的简单性的破坏。限制缩进的规则导致 parse 时就很难卸掉一个单独的 phase,而必须导致抽象泄漏;这也导致扩展 spec 派生其它语言的一些困难而损失语言 spec 的可用性。(说远点,钦定 phase 是我喷“静态”的根本理由,只不过这个和 Python 也没直接关系就是了。)

然后我给你追加一个 GvR 本身的反智(先不提这人搞 PL 设计的意义上不务正业很久了,什么 lambda 该限制几行的破事也瞎倒腾……):连 proper tail recursion 和 tail call optimization 也分不清,不懂 shadow stack 还会借口阻碍 debug 瞎限制 stack depth,被人教育后还是“和尚念经老子不听”,这种水平的爹的语言敢通用?

关于这个 feature 设计大方向的“工程影响”问题,一个 lua 就够打脸咣咣响了。(虽然有违反 EWD 831 的另一个反智问题,也是屑。)

这些问题你都当“不限制你表达”的话,也是醉了。
youngxu
2019-06-30 14:48:45 +08:00
至少对科研人员来讲很友好,简单易上手。就拿计算物理课程说,前几届学长用的是 fortran,但我们这一届换成了 python,(人的)效率提升不是一点半点
sazima
2019-06-30 14:53:24 +08:00
写过 python 写过 java, 最后还是选择了 python 的简洁
charlie21
2019-06-30 15:00:33 +08:00
什么编程语言选择,哪这么多内心戏?

这其实不是你的选择,是甲方的选择。甲方指明了 不让用 python,让用 java,那么你就得用阿 —— 要不你就别干了

至于甲方为什么选择 java 而没选 python,这不是显而易见的么?
人家志在修建南京长江大桥,自然不想拿四驱车工具箱凑合

-
VinsonGuo
2019-06-30 15:02:39 +08:00
已经被 java 的 ide 惯坏了,想问下 py 大佬们 ide 经常不提示是怎么解决的,难道那么多 api 都能记下来?
charlie21
2019-06-30 15:09:37 +08:00
( 当然,在另一群人的眼里,他们修氪星β域长江大桥,他们眼里 java 才是四驱车工具箱,python 才是正经工具,
他们也是修桥的 -- 玩具桥也是桥、氪星β域长江大桥 也是 桥 -- 所以他们不想拿四驱车工具箱凑合,所以 选择了 python ) 滑稽

氪星人的眼里的四驱车工具箱和你眼里的四驱车工具箱是不一样的

他人觉得 python 是正经工具,你觉得 java 才是正经工具;这里的互相否定,是很正常的,不是否定对方的工具,而是否定对方干的活儿:
在氪星人眼里 氪星人看地球人的南京长江大桥是玩具 那么让地球人用 java 这种玩具语言桥修他们的玩具桥 是很自然的;
在氪星人眼里 氪星β域长江大桥 才是需要正经对待的,自然要用 python

所以 问题来了:你是地球人还是氪星人

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

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

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

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

© 2021 V2EX