猛禽的编程艺术

这是老人家了,不认识可以理解,哈哈。webpy 用户。 ...

↑我也要推荐

Python 有什么缺点?!

发布时间:2012-01-02 22:25:00, 关注:+1695, 评论:+0, 赞美:+10, 不爽:+7

原始出处: shell's home

在 2011年12月21日 下午2:24,Zoom.Quiet 写道: > 在昨天内部分享交流中,俺回顾了 PyCon2011China 中透露出的 Py 最新使用/发展和体验; > 最后有同学问: >    Python 有什么缺点!? > > 直接HOLD 住了俺的思路… >    - 是也乎!? >    - 世界上没有完美的语言 >    - Python 相比各种开发语言也有缺点,当然的! >    可是,是什么呢?! > > – 没有 {} ? > – 不支持多CPU ? > > 大家在学习使用过程中,对 Python 有什么失望的地方?! > – 兼听则明 > – 现在不满意的,就是我们努力的方向.. > > PS: > – 俺现场憋出的回答是: >    - 由于 Py 历史上积累的好用模块太多,会导致开发人员更加懒惰,不思进取,不论什么都可以直接搜出可用的现成模块来! > > — > 人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦! > 俺: http://about.me/zoom.quiet > 文字协议:http://creativecommons.org/licenses/by-sa/2.5/cn/ > > — > 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表) > 规则: http://code.google.com/p/cpyug/wiki/PythonCn > 发言: python-cn@googlegroups.com > 退订: python-cn+unsubscribe@googlegroups.com (向此发空信即退!) > 详情:http://code.google.com/p/cpyug/wiki/PythonCn > 严正: 理解列表! 智慧提问!http://wiki.woodpecker.org.cn/moin/AskForHelp > 强烈: 建议使用技巧: 如何有效地报告Bughttp://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

好大的题目,我干脆写完发blog得了。

python的整个系统,我其实有非常多的不满。但是用任何一门语言都是取舍问题,如果有一门语言,库够多,已读,易用,性能高,我毫不犹豫立刻转过去。python的强处在于庞大的库,还有非常好的易读和易用性。但是相比来说,性能一直是个问题。python的实现性能大约和C相差五倍上下。如果是大规模计算问题,大约能差10倍以上。当然,我们可以写C扩展,但是这就不是使用python了。我们也可以说,很多时候我们不需要这么快的速度。这是个事实,但是不改变python性能差的事实。 python不但性能差,还有GIL这个玩意。以至于我现在对高并发计算都采取多进程的模式。多进程模式的通讯效率肯定比多线程低,而且麻烦。

另外,python在底层设计上,也表现出很强的实用主义倾向。这是比较外交术语的词汇,更加直白的说法应当是,混乱,不知所谓。在闭包设计上采用free variable设计,而不是lisp中的environs设计。区别?你试试看在外层闭包中from lib import *。由于引入不定个数名称,free variable无法处理。类似的问题还有LEGB规则,新手往往要花很长时间研究这个例子究竟是怎么错的: a = 1 def f(): print a a = 2 我勒个去,这种反直观反人类的事情都有,还敢说自己易读。

还有坑爹的元编程,这东西根本是坑爹中的坑爹货。如果你用过多重继承,大概就知道python的整个OO系统看起来根本是大型的仿真,到处都是乱糟糟的。C++怎么解决多重继承的?你最好别用(真心说,这可比python更加坑爹)。java怎么解决多重继承的,只能继承Interface。其实这是变相的变成了Interface-Implement模式。python怎么解决的?MRO!为什麽一个类加个__metaclass__就会改变性质啊,为什麽一个类去生成另一个类的写法是——我基本不记得了,反正web.py里面有用到,需要的话去炒栗子吧。为什麽方法要隐藏居然要改名字加__啊。你到底是在做OO还是在看起来像OO的东西上狂打补丁啊魂淡。

lambda表达式弱智。我和人讨论过,lambda是否是图灵完备的。结论还是完备的,不过需要借助Y combinator。何必呢?由于强调lambda的快速特性,因此将lambda强制在一行以内(没有结束标记),导致python其实是没有匿名函数的。一个callback数组写的难过死。

语法糖太多了点,当然,这是纯粹的个人感觉。语法糖是把双刃剑,用的好,可以简化编写和阅读,但是太多,往往容易引入语法混乱和额外的约束。

另外,语言的自构建特性混乱。虽说不是每门语言都强调自构建特性,但是通常而言,都是使用C实现一个内核,由内核实现一些基础操作。再由基础操作实现更复杂的操作。每层的边界都是比较清晰的。谁来告诉我,python中有多少库在移植时是由纯python实现的?库的相互依赖层级是?

python的沙盒化也是个问题,如果沙盒做的够好,我完全可以把python作为一个客户级别的平台。用C写一个很简单的类似浏览器的东西,下载一个URL的python包回去运行(或者仅仅检查更新)。从而保证本地效果/跨平台/安全性。现在?一个都保证不了。我连把一个python包转移到另一台同构设备上都很麻烦(如果两者不是严格匹配,例如系统差异,系统版本差异)无论是web开发还是移动终端开发都必须走传统模式。

分享:Python 有什么缺点?!

评论(0):Python 有什么缺点?!

称呼(*)

网站

邮箱

右边是什么单词? python

# 建议上面的都填写,系统会自动记住的,且有头像和你的网站链接 (从 getavatar.com 获取头像)

Copyright© python.cn(news, jobs) simple-is-better.com, 技术驱动:powered by web.py 空间主机:Webfaction

版权申明:文章转载已注明出处,如有疑问请来信咨询。本站为 python 语言推广公益网站,与 python 官方没有任何关系,也与 python.cn 这个域名没有关系。

联系/投搞/留言: en.simple.is.better@gmail.com