[PyCon2011China]后续思考: Py 有什么缺点?!

149 views
Skip to first unread message

Zoom.Quiet

unread,
Dec 21, 2011, 1:24:04 AM12/21/11
to Python.cn@google
在昨天内部分享交流中,俺回顾了 PyCon2011China 中透露出的 Py 最新使用/发展和体验;
最后有同学问:
Python 有什么缺点!?

直接HOLD 住了俺的思路...
- 是也乎!?
- 世界上没有完美的语言
- Python 相比各种开发语言也有缺点,当然的!
可是,是什么呢?!

- 没有 {} ?
- 不支持多CPU ?

大家在学习使用过程中,对 Python 有什么失望的地方?!
- 兼听则明
- 现在不满意的,就是我们努力的方向..

PS:
- 俺现场憋出的回答是:
- 由于 Py 历史上积累的好用模块太多,会导致开发人员更加懒惰,不思进取,不论什么都可以直接搜出可用的现成模块来!

--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/

智障

unread,
Dec 21, 2011, 1:31:58 AM12/21/11
to pyth...@googlegroups.com
由于 Py 历史上积累的好用模块太多,会导致开发人员更加懒惰,不思进取,不论什么都可以直接搜出可用的现成模块来!
++++++++++++++++++++++++++++
明明是优点!

要说缺点,肯定是一说能说出一大堆来,只是某人视而不见罢了。如果Python真有那么好,干嘛整个Python3出来,不向后兼容?一个要大修的语言,会没缺点。如果它确实没缺点,那么这次大修本身就是一大缺点。

Pythoner将来的日子不会很好过。

>--
>来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
>规则: http://code.google.com/p/cpyug/wiki/PythonCn
>发言: pyth...@googlegroups.com
>退订: python-cn+...@googlegroups.com (向此发空信即退!)
>详情: http://code.google.com/p/cpyug/wiki/PythonCn
>严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

zw g

unread,
Dec 21, 2011, 1:55:24 AM12/21/11
to pyth...@googlegroups.com
我个人感受,请轻拍:

1)iOS, Android等移动设备的App开发目前感觉不给力 (不是指web的方式)
2)性能
3)多核?
4)GIL?
5)编译打包流程

大家补充?


2011/12/21 智障 <ias...@163.com>

qihang zhang

unread,
Dec 21, 2011, 1:56:45 AM12/21/11
to pyth...@googlegroups.com
py2到py3应该算是python的进化吧~ 由好到更好的过程。
“大修”这个词让我感觉py2好像就是由于设计失误导致近视眼的早期哈勃望远镜似的~ 应该没这么差劲吧~ 呵呵

我感觉要说缺点,容易被提溜出来批斗的应该就是 不原生支持并行,运行速度不够快 吧~
还有一些仁者见仁智者见智的,比如 变量类型声明, 接口类型 之类的~

Leo Jay

unread,
Dec 21, 2011, 1:58:57 AM12/21/11
to pyth...@googlegroups.com
2011/12/21 智障 <ias...@163.com>:

> 由于 Py 历史上积累的好用模块太多,会导致开发人员更加懒惰,不思进取,不论什么都可以直接搜出可用的现成模块来!
> ++++++++++++++++++++++++++++
> 明明是优点!
>
> 要说缺点,肯定是一说能说出一大堆来,只是某人视而不见罢了。如果Python真有那么好,干嘛整个Python3出来,不向后兼容?一个要大修的语言,会没缺点。如果它确实没缺点,那么这次大修本身就是一大缺点。
>

我不同意说python没缺点。但我也不认为python3是一次大修。
在我看来python3最重要变化,一是print之类的语句变成了函数调用,二是默认使用unicode做字符串。
这能算是大修么?至少我个人认为是不算的。

从我的角度来说,python可以提高的地方,
一是运行速度,目前还远不能跟编译型语言比,
二是IDE,还没哪款python的IDE能达到intellij idea和eclipse对java的支持
三是多线程并发执行的支持

至于语言本身,我没感觉到有什么明显的缺点。

> Pythoner将来的日子不会很好过。
>

如果一个人靠一个语言,而不是自己的技术水平活着无论他是XXXer或是YYYer,都不会很好过。

--
Best Regards,
Leo Jay

Frey

unread,
Dec 21, 2011, 2:05:34 AM12/21/11
to pyth...@googlegroups.com
pypy速度不错,不知道什么时候能有一个完善稳定的版本出来

zw g

unread,
Dec 21, 2011, 2:10:56 AM12/21/11
to pyth...@googlegroups.com
大家对Py3都是一边倒说好呀。但是,有牛人好像对Py3很有意见呢,这又怎么说?

http://lucumr.pocoo.org/2011/12/7/thoughts-on-python3/



2011/12/21 Frey <zmy...@gmail.com>
pypy速度不错,不知道什么时候能有一个完善稳定的版本出来

Leo Jay

unread,
Dec 21, 2011, 2:12:13 AM12/21/11
to pyth...@googlegroups.com
2011/12/21 Frey <zmy...@gmail.com>:
> pypy速度不错,不知道什么时候能有一个完善稳定的版本出来
>

我看还早着呢。对CPython的第三方库支持不好是硬伤。
pypy之于python就像mono之于.net,openjdk之于java,
大家都说他们好,但都叫好不叫座,真正用的时候,你总是时不时会发现有那么一些地方跟原版兼容性有问题

Leo Jay

unread,
Dec 21, 2011, 2:29:21 AM12/21/11
to pyth...@googlegroups.com
2011/12/21 zw g <peking...@gmail.com>:

> 大家对Py3都是一边倒说好呀。但是,有牛人好像对Py3很有意见呢,这又怎么说?
>
> http://lucumr.pocoo.org/2011/12/7/thoughts-on-python3/
>

对于那些写代码用英文,写注释用英文,平时也不用处理非英文数据的人来说,转3的动力的确不强。

我的看法是,
1. 如果你手上已经有2的项目要维护,那就继续用2,不要做迁移。
2. 如果你要新做一个web项目,先去看看cherrypy能不能满足你的要求。如果可以的话,就用3,不行就用2
3. 如果你已经知道你要做什么,先去找找相关的库对3是否支持,如果不行,就用2
4. 其它情况,能用3就用3

总的来说就是能用3就用3,毕竟3是未来的方向,而且的确有相当一些细节上的改进
但如果不能用3的情况下,那就用2,不要勉强。

ubunoon

unread,
Dec 21, 2011, 2:43:31 AM12/21/11
to pyth...@googlegroups.com
1、大部分使用的是CPython,运行速度与其他编译型语言相比,还是不够快速
2、万恶的GIL
3、嵌入到C比较麻烦。
4、框架太多
5、资料还是相对较少
6、IDE,很难找出一款好的IDE,来一统Python的天下(或者是桌面或者是web开发)
7、商业应用支持还是比较少 (这个才是重点)
8、google复杂问题的解决(就好像之前我发的PySide的问题),还是不够给力。

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

智障

unread,
Dec 21, 2011, 3:05:19 AM12/21/11
to pyth...@googlegroups.com
俺觉得俺现在用着Python2也挺好,编码问题不是什么大问题加#-*- coding:utf-8 -*-用章鱼编辑器的自动插入功能,也挺方便。

zhao shichen

unread,
Dec 21, 2011, 3:08:39 AM12/21/11
to pyth...@googlegroups.com
3别的都好,就是和2比起来速度太慢了。

目前我认为很多内置库的质量不高才是最严重的问题。

至于什么GIL、IDE之类的反正我是不关心
呆痴木讷,君子四德

Telins Ma

unread,
Dec 21, 2011, 3:13:47 AM12/21/11
to pyth...@googlegroups.com
支持

在 2011年12月21日 下午3:43,ubunoon <net...@gmail.com>写道:

qihang zhang

unread,
Dec 21, 2011, 3:18:30 AM12/21/11
to pyth...@googlegroups.com
歪一下楼
什么是章鱼编辑器?

智障

unread,
Dec 21, 2011, 3:30:09 AM12/21/11
to pyth...@googlegroups.com
当然是神器Emacs。它让你希望把自己变成八只手的章鱼。
退订: python-cn+unsub...@googlegroups.com (向此发空信即退!)

CJ

unread,
Dec 21, 2011, 3:57:30 AM12/21/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
Python的Object & Class 系统有逻辑上的问题
1. Object支持了__eq__方法,为什么还要实现__ne__方法?很基本的哲学道理,一个可推导的世界中,A==B为真,则A!=B一定为
假,__ne__方法大家都不会用,那就应该人Python中去掉,免得引起混乱
2. classobj与type这两个东西确实该去掉一个,鸡乎?蛋乎?(Python 3去掉了classobj)


Python的字符串unicode,寄期望于Python 3
Python的lambda只支持表达式,Python仍然区分表达式与语句,这点导致lambda里没了if(虽然你也可以找很多其它的理由来解释
lambda里的代码不应写得复杂),还有Python的closure

Python函数的tail_call_optimize

"".join 你懂的,Python有些库的方法命名有些奇怪,有些有下划线,有些没有下划线。有些类是全小写,有些类是Camel,Java这些方
面就很好。。。。历史遗留问题啊

Python的文档????我看django文档时,只想着一句话:Read The Fucking Source Code!!!有些函数的文档我
看半天还是没搞清楚倒底怎么个用法,一是函数参数没有类型说明,另一方面,我还是比较喜欢直接的example。(感觉Java的API文档也要比
Python的好很多喔,整洁不少)。

目前就只想到这些 ^O^

老光

unread,
Dec 21, 2011, 4:14:08 AM12/21/11
to pyth...@googlegroups.com
看到join,始终觉得,join应该是list, tuple的方法:
list1 = ['a','b','c']
list1.join('-')
'a-b-c'

而如果要保留字符串的join方法的话,应该可以接受多个参数:
'-'.join('a','b','c')
'a-b-c'

sj l

unread,
Dec 21, 2011, 4:10:08 AM12/21/11
to pyth...@googlegroups.com

sj l

unread,
Dec 21, 2011, 4:16:54 AM12/21/11
to pyth...@googlegroups.com
join 如果是list的方法的话,那么tuple也要实现一个join~

2011/12/21 sj l <shuxi...@gmail.com>

Leo Jay

unread,
Dec 21, 2011, 4:19:20 AM12/21/11
to pyth...@googlegroups.com
2011/12/21 CJ <jamc...@gmail.com>:

>
> Python的文档????我看django文档时,只想着一句话:Read The Fucking Source Code!!!有些函数的文档我
> 看半天还是没搞清楚倒底怎么个用法,一是函数参数没有类型说明,另一方面,我还是比较喜欢直接的example。(感觉Java的API文档也要比
> Python的好很多喔,整洁不少)。
>
>

说到这个我想起来,python的文档很SB的地方是,它很少说一个方法调用是否会抛异常以及抛什么类型的异常。
比方说int这个函数,它就说了句:如果转入参数不是字符串,会抛TypeError,然后就没了。
要是你因此你只抓TypeError的话就傻了,因为如果字符串不是数字的话,抛的是ValueError。
如果因此,你写try ... except代码都写成
try:
foo()
except:
...
的话,你也可能中招,因为sys.exit()的退出方式就是抛一个异常。如果你foo()有逻辑在一定情况下调用sys.exit来退出的话,
你会发现这个异常被你抓掉了。。。
所以我现在养成习惯,代码都写成:
try:
foo()
except Exception:
...

而更多的方法,比如time.sleep,文档压根就不告诉你,它可能会抛异常。

http://docs.python.org/library/functions.html#int
http://docs.python.org/library/time.html#time.sleep

依云

unread,
Dec 21, 2011, 4:20:02 AM12/21/11
to pyth...@googlegroups.com
On Wed, Dec 21, 2011 at 04:05:19PM +0800, 智障 wrote:
> 俺觉得俺现在用着Python2也挺好,编码问题不是什么大问题加#-*- coding:utf-8 -*-用章鱼编辑器的自动插入功能,也挺方便。

如果你认为所谓的「编码问题」指的是这个的话你就大错特错了。Python 2 在引
入 Unicode 后即混淆了 str 和 unicode——在一个需要字符串的 API,你既可以传
str 也可以传 unicode。有些 API 没处理好,如:

>>> os.path.join('中文', u'路径')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/posixpath.py", line 71, in join
path += '/' + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

经常会遇到这种情况。然后你 encode 或者 decode 一下就解决了。问题是,这种
问题没有规律。

还有一个问题是,

>>> '中文'
'\xe4\xb8\xad\xe6\x96\x87'
>>> u'中文'
u'\u4e2d\u6587'

repr 的结果不可读。这意味你 print 一个 list 或者 dict 什么的,你看不到其
中的中文。

--
Best regards,
lilydjwg

Linux Vim Python 我的博客:
http://lilydjwg.is-programmer.com/
--
A: Because it obfuscates the reading.
Q: Why is top posting so bad?

Zoom.Quiet

unread,
Dec 21, 2011, 4:22:19 AM12/21/11
to pyth...@googlegroups.com
嗯嗯嗯,想起了:我想要的 python 特性 - 赖勇浩的编程私伙局 - 博客频道 - CSDN.NET
http://blog.csdn.net/lanphaday/article/details/6043605
对 Python 不能立即说出一堆问题的人,一定是没有将 Python 用到深处的初级用户...
- 看来俺的修行不足哪!
大家都很给力!收录在:
http://wiki.woodpecker.org.cn/moin/MiscItems/2011-12-21

> --
> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 发言: pyth...@googlegroups.com
> 退订: python-cn+...@googlegroups.com (向此发空信即退!)
> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--

zhao shichen

unread,
Dec 21, 2011, 5:10:00 AM12/21/11
to pyth...@googlegroups.com
1.很多标准库很烂;而很多很好的库竟然不在标准库之中,比如chardet等等,而xml之类没用的东西反而有
2.lambda演算太弱:如果有类似(x,y)->这样的语法就更好了;python3竟然进一步的削弱了lambda演算的能力
3.字符串的join看起来太奇怪了
4.发展了自己的一套正则表达式,直接用pcre不好吗。而且这个库的使用我感觉不友好。
5.听说python的unix域socket的性能不佳,仅仅是听说,在我的简单测试中感觉unix域socket的速度和普通socket速度一样:应该快一倍才对。
6.没有标准的IPC函数,比如共享内存,消息队列等,这些东西很有用阿
7.引入了太多java里面的垃圾概念,就是那些面向对象的东西。导致本来很简单的东西搞得很复杂,最典型的例子是logging模块,这个模块太烂了
8.socke的函数支持不全,比如sendfile等等都没有支持
9.很不喜欢元类编程,把本来很简单的东西搞复杂,都是java里面的垃圾概念

在我的项目组中,基本上不准编写类,只允许编写函数,目的就是为了方便集成和控制代码;

象很多java项目比如eclipse一样搞得又大又臭是绝对没法接受的


--
呆痴木讷,君子四德

zhao shichen

unread,
Dec 21, 2011, 5:17:22 AM12/21/11
to pyth...@googlegroups.com
总之,越来越多的“懂OO的java工程师“进入python领域,导致python越来越差劲
--
呆痴木讷,君子四德

zhao shichen

unread,
Dec 21, 2011, 5:22:51 AM12/21/11
to pyth...@googlegroups.com
记得最后一次使用xml,还是在搞一个TEI.2的一个项目,最后还是用xsltproc来解决的




--
呆痴木讷,君子四德

智障

unread,
Dec 21, 2011, 5:34:40 AM12/21/11
to pyth...@googlegroups.com
确实,logging和socketserver一比,简直就不像是同一个星球上的。
窃以为ElementTree是个好东西,因为json经常出错。之前是获取淘宝数据会出错,最近试了一下疼讯的微博,也出错。
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
退订: python-cn+unsub...@googlegroups.com (向此发空信即退!)

shhgs

unread,
Dec 21, 2011, 5:56:42 AM12/21/11
to pyth...@googlegroups.com
问题还是很多的

1. 匿名函数。Py3一度要取消lambda,脑残了不是。正确的做法应该是进一步加强lambda,搞匿名函数
2. 莫名其妙的local域。我写twisted的时候,没少吃药。稍微不留神就掉坑里。
3. 很多类库的port都不完整。socket,readline,ncurse 。。。
4. 为什么要区分表达式和语句?有这个必要吗?表达式全部返回None,或者专门定义一个Void岂不是更好?
5. Py的标准类库应该修订一下了。标准类库的质量良莠不齐,有些类库明显落伍。htmllib,
sgmllib ,HTMLParser,现在还有人用吗,为什么不用lxml?re,建议用pcre;ConfigParser,建议去掉。
6. 进一步增强easy_intall。应该设计类似rpm, dpkg这样的Python library package。以类似yum,apt的方式分发这种包。


On Wed, Dec 21, 2011 at 02:24:04PM +0800, Zoom.Quiet wrote:
> 在昨天内部分享交流中,俺回顾了 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
> 发言: pyth...@googlegroups.com

> 退订: python-cn+...@googlegroups.com (向此发空信即退!)

Zoom.Quiet

unread,
Dec 21, 2011, 6:00:04 AM12/21/11
to pyth...@googlegroups.com
在 2011年12月21日 下午6:56,shhgs <shhgs....@gmail.com> 写道:
> 问题还是很多的
>
> 1. 匿名函数。Py3一度要取消lambda,脑残了不是。正确的做法应该是进一步加强lambda,搞匿名函数
> 2. 莫名其妙的local域。我写twisted的时候,没少吃药。稍微不留神就掉坑里。
> 3. 很多类库的port都不完整。socket,readline,ncurse 。。。
> 4. 为什么要区分表达式和语句?有这个必要吗?表达式全部返回None,或者专门定义一个Void岂不是更好?
> 5. Py的标准类库应该修订一下了。标准类库的质量良莠不齐,有些类库明显落伍。htmllib,
> sgmllib ,HTMLParser,现在还有人用吗,为什么不用lxml?re,建议用pcre;ConfigParser,建议去掉。
> 6. 进一步增强easy_intall。应该设计类似rpm, dpkg这样的Python library package。以类似yum,apt的方式分发这种包。
>
- 最后这已经在整了 pip 就更加好用的

zhao shichen

unread,
Dec 21, 2011, 6:12:36 AM12/21/11
to pyth...@googlegroups.com
支持一下!

ConfigParser这个一点用处都没有。现在我都用yaml来作配置文件了。

local域的问题我也是在twisted上遇到了好多次,跟twisted斗争了3,4年;现在转移阵地到tornado了,

话说twisted真是让人有爱有恨阿。这个东西也是java垃圾的OO编程的概念的牺牲品。

ror在这点上就值得赞一下,对于好东西那是拿起来一点也不手软阿。

还有egg这个打包方式我觉得很赞,但是总觉得python对这个支持不够,用起来还不那么顺

在 2011年12月21日 下午6:56,shhgs <shhgs....@gmail.com>写道:



--
呆痴木讷,君子四德

ubunoon

unread,
Dec 21, 2011, 6:47:50 AM12/21/11
to pyth...@googlegroups.com
最大的不足是标准库的命名都不规范。os的小写,HTTPServer那一部分,基本上都是大写的。
函数名,有用_链接,用camel方式,也有Title方式。

lambda实在是太弱了,filter里面直接写lambda函数,太痛苦。

shhgs

unread,
Dec 21, 2011, 9:01:54 AM12/21/11
to pyth...@googlegroups.com
twisted 跟函数编程更接近。defer活脱脱就是一个Monad.

Shell Xu

unread,
Dec 21, 2011, 9:06:20 AM12/21/11
to pyth...@googlegroups.com

好大的题目,我干脆写完发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-Impalement模式。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开发还是移动终端开发都必须走传统模式。

unread,
Dec 21, 2011, 9:07:39 AM12/21/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
我感觉py的速度和VB都还不是一个数量级的,都是解释型的,悲剧。。。

bhuztez

unread,
Dec 21, 2011, 9:26:53 AM12/21/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
pip也没有带来根本的变化,我要的是从yum/apt直接装pypi上的包

On 12月21日, 下午7时00分, "Zoom.Quiet" <zoom.qu...@gmail.com> wrote:
> 在 2011年12月21日 下午6:56,shhgs <shhgs.efh...@gmail.com> 写道:> 问题还是很多的

bhuztez

unread,
Dec 21, 2011, 9:28:39 AM12/21/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
scope的问题不跳出现在这个框框是找不到够好的方法的,具体可以参考 http://lua-users.org/wiki/LocalByDefault
里的讨论

On 12月21日, 下午10时06分, Shell Xu <shell909...@gmail.com> wrote:

> > 强烈: 建议使用技巧: 如何有效地报告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-Impalement模式。python怎么解决的?MRO!为什麽一个类加个__metaclass__就会改变性质啊,为什麽一个类去生成另一个类的写法是----我基本不记得了,反正web.py里面有用到,需要的话去炒栗子吧。为什麽方法要隐藏居然要改名字加__啊。你到底是在做OO还是在看起来像OO的东西上狂打补丁啊魂淡。

赖勇浩

unread,
Dec 21, 2011, 9:31:20 AM12/21/11
to pyth...@googlegroups.com
2011/12/21 Zoom.Quiet <zoom....@gmail.com>:

> 在昨天内部分享交流中,俺回顾了 PyCon2011China 中透露出的 Py 最新使用/发展和体验;
> 最后有同学问:
> Python 有什么缺点!?
>
> 直接HOLD 住了俺的思路...
> - 是也乎!?
> - 世界上没有完美的语言
> - Python 相比各种开发语言也有缺点,当然的!
> 可是,是什么呢?!
个人看法:支持 native thread 是它最大的错误。

>
> - 没有 {} ?
> - 不支持多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
> 发言: pyth...@googlegroups.com
> 退订: python-cn+...@googlegroups.com (向此发空信即退!)
> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
web site:http://laiyonghao.com
twitter: http://twitter.com/laiyonghao

Shell Xu

unread,
Dec 21, 2011, 9:30:46 AM12/21/11
to pyth...@googlegroups.com
别的不说,apt是绝对没有可能的,除非pip自行组建仓库。
apt官方的repos必须符合dsfg规范,我现在在做打包,基本就是每个文件级别核查文件的版权和授权,另外还得处理一堆杂七杂八的事情。如果要直接进入apt的源,除非pip摒弃不支持dsfg规范的包。

> --
> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 发言: pyth...@googlegroups.com
> 退订: python-cn+...@googlegroups.com (向此发空信即退!)
> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
无能者无所求,饱食而遨游,泛若不系之舟
blog: http://shell909090.com/blog/
twitter: http://twitter.com/shell909090

bhuztez

unread,
Dec 21, 2011, 9:34:57 AM12/21/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
apt支持和进debian源是同一回事?

On 12月21日, 下午10时30分, Shell Xu <shell909...@gmail.com> wrote:
> 别的不说,apt是绝对没有可能的,除非pip自行组建仓库。
> apt官方的repos必须符合dsfg规范,我现在在做打包,基本就是每个文件级别核查文件的版权和授权,另外还得处理一堆杂七杂八的事情。如果要直接进入apt的源,除非pip摒弃不支持dsfg规范的包。
>

> > 严正: 理解列表! 智慧提问!http://wiki.woodpecker.org.cn/moin/AskForHelp
> > 强烈: 建议使用技巧: 如何有效地报告Bughttp://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

Leo Jay

unread,
Dec 21, 2011, 12:08:08 PM12/21/11
to pyth...@googlegroups.com
2011/12/21 老光 <yaogua...@cq.chinatelecom.com.cn>:

> 看到join,始终觉得,join应该是list, tuple的方法:
> list1 = ['a','b','c']
> list1.join('-')
> 'a-b-c'
>

为什么你感觉应该是list, tuple的方法呢?
如果把join理解成连接,那显然应该是用'-'来连接一个列表,怎么会是用一个列表来连接一个'-'呢?
在我看来,硬要放到list里去的话,应该叫joined_by才行吧。

> 而如果要保留字符串的join方法的话,应该可以接受多个参数:
> '-'.join('a','b','c')
> 'a-b-c'
>

HYRY

unread,
Dec 21, 2011, 6:16:48 PM12/21/11
to pyth...@googlegroups.com
有时候写__eq__,__ne__方法不是为了比较,而是为了生成别的代码,例如SQL。
我最近正好写了一个编译器,它需要在某些条件下在__eq__,__ne__中抛出不同的异常。如果没有
__ne__那就麻烦了。

pansz

unread,
Dec 21, 2011, 7:24:53 PM12/21/11
to pyth...@googlegroups.com
2011/12/21 依云 <lily...@gmail.com>:

> 如果你认为所谓的「编码问题」指的是这个的话你就大错特错了。Python 2 在引
> 入 Unicode 后即混淆了 str 和 unicode——在一个需要字符串的 API,你既可以传
> str 也可以传 unicode。有些 API 没处理好,如:
>>>> os.path.join('中文', u'路径')
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
>  File "/usr/lib/python2.7/posixpath.py", line 71, in join
>    path += '/' + b
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

2 其实不存在混淆 str 跟 unicode 的问题,需要 str 的地方会自动把 unicode 转成 str,需要 unicode
的地方会自动把 str 转成 unicode。
问题在于缺省的转换使用的 ascii 编码,因此只要含有中文的,一律不能通过 python2
的“自动类型转换”。所以编程过程中凡是存在这种“自动类型转换”的环节,一律需要改成手动转换。——我以为只要理解这个,几乎可以解决python2
90%以上的编码问题。

> 经常会遇到这种情况。然后你 encode 或者 decode 一下就解决了。问题是,这种
> 问题没有规律。

我觉得很有规律。

> 还有一个问题是,
>>>> '中文'
> '\xe4\xb8\xad\xe6\x96\x87'
>>>> u'中文'
> u'\u4e2d\u6587'
> repr 的结果不可读。这意味你 print 一个 list 或者 dict 什么的,你看不到其
> 中的中文。

这个问题产生的原因跟上述是一样的,py2 缺省输出ascii ,不是 utf-8 。。。因而自然不能看到。
但是如果你只是要 print 的话,一个非常非常简单的办法是:输出为 json,并指定为 utf-8 格式,json编码器增加
default 函数为 repr(obj)。这样的输出几乎跟 repr 完全一致,除了那些乱码中文变成了真正的 utf-8 中文。


其实说了那么多, py3 对国人唯一的重要改进仅仅是“缺省编码由 ascii 修改为了
utf-8”而已。为了这点点改变去伤筋动骨的大修整个语言,并且弄得向后不兼容。有点太过了。简单的修改一下 python2
源代码就能做到的事。。。

pansz

unread,
Dec 21, 2011, 7:35:15 PM12/21/11
to pyth...@googlegroups.com
我觉得这些是缺点:
1。python3 的存在,python2 如果没缺点 python3 就不需要存在了,源代码还不兼容。这会造成不小的混乱。
2。没有一个堪比 Java 性能的 JIT 实时编译解释器。
3。源代码无法真正意义上的加密(当然解释执行类语言都有这个问题,Java 也一样,反编译太容易。。。而象 C++ 编译之后基本不可能反出源代码。)

Python 目前为止主要用于服务器端,正因为解释型语言都不可能真正意义上的加密源代码,所以只有部署在服务器端能避免这个问题。

2011/12/21 Zoom.Quiet <zoom....@gmail.com>:

Shell Xu

unread,
Dec 21, 2011, 8:20:22 PM12/21/11
to pyth...@googlegroups.com

可以自行组建repos,但是这样就要自行理清多个发行的依赖关系。

from miui

bhuztez

unread,
Dec 21, 2011, 8:51:25 PM12/21/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
最好不要再建repos,而是apt可以直接装pypi上的,不需要别的东西提供支持。

On Dec 22, 9:20 am, Shell Xu <shell909...@gmail.com> wrote:
> 可以自行组建repos,但是这样就要自行理清多个发行的依赖关系。
>
> from miui

> > 严正: 理解列表! 智慧提问!http://wiki.woodpecker.org.cn/moin/AskForHelp

Shell Xu

unread,
Dec 21, 2011, 8:59:57 PM12/21/11
to pyth...@googlegroups.com
所以我就说,debian下面这个做不到阿,原因是dsfg。

> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp


> 强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--

CJ

unread,
Dec 21, 2011, 9:11:59 PM12/21/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
不要老是这样说吧,不能因噎废食,我看GTK库的C语言接口时,发现实例方法在C中的实现无非是将this struct一致作为函数第一个参数而
已。
你要是在Python中,明明可以写成socket.read(length)的,非要写成read(socket,length),然后方法名又会冲
突,又要写成socket_read(socket,length)或是socketlib.read(socket,length),不成了胡折腾了
吗,呵呵

我想起了程序员A,发现Event、Observer很好用很灵活(那个面向事件面向消息编程嘛),就所有的调用都bindEvent再那个
triggerEvent,明明只需要一个callback就解决了,非说Event更灵活更具可扩展性
就像那些刚看了些OO设计模式的,就在10行代码内用了20种设计模式,这就是那些"懂OO的Java程序员"干的事

然后另一个程序员B,看了些Lisp,然后就一个劲的在python中lambda map reduce filter ,明明用Class,用对象
实例来表示更方便的,非要把变量放到closure中,然后就像个黑盒子一样调方法。。。。然后这些程序员还喜欢不用if else,非要用and
or什么的。悲催啊

Python中的OO和lambda确实实现的不咱地,有谁能解释下__new__与__init__的功能??这方面Ruby又是一个好的学习对象,
Ruby比Java更OO,但更具有一致性,比如new也是一个方法(Ruby中的说法是向对象发送一个new的消息,又是面向消息嘛,呵呵)

我喜欢Ruby的一个原因是它其实像Lisp+Smalltalk。说起来,论OO特性,Python没地位,论FP特性,Python也没地位,论标
准库,Python的工具库很多,但标准库似乎有些Out。剩下的只有Python语法简单了,但Python还有神马的元编程,多继承,我我
我。。。

所以用Python,即不要太OO,也不要太FP,因为它在这两方面都不擅长(我只说不要太OO,太FP,不是说不要OO,不要FP哦,呵呵)。也不要
指望Python运行速度多快,在这方面我已经开始使用Go语言了。
Keep it simple,才是Python之禅!^O^


On Dec 21, 6:17 pm, zhao shichen <shichen.z...@gmail.com> wrote:
> 总之,越来越多的"懂OO的java工程师"进入python领域,导致python越来越差劲
>

bhuztez

unread,
Dec 21, 2011, 9:12:11 PM12/21/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
继承这问题,先不管__metaclass__,事实上按照这些语言的实现方式,已经没有什么选择了。python的已经算好了,看看C++,看看
Java,再看看Lua/JavaScript,一个个都比Python烂啊


On Dec 21, 10:06 pm, Shell Xu <shell909...@gmail.com> wrote:

> > 严正: 理解列表! 智慧提问!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-Impalement模式。python怎么解决的?MRO!为什麽一个类加个__metaclass__就会改变性质啊,为什麽一个类去生成另一个类的写法是----我基本不记得了,反正web.py里面有用到,需要的话去炒栗子吧。为什麽方法要隐藏居然要改名字加__啊。你到底是在做OO还是在看起来像OO的东西上狂打补丁啊魂淡。

sj l

unread,
Dec 21, 2011, 9:24:17 PM12/21/11
to pyth...@googlegroups.com
协程的支持也是个问题,py3虽然很快会支持yield from,可是这货的体验根本没法跟greenlet比

2011/12/22 Shell Xu <shell...@gmail.com>

Shell Xu

unread,
Dec 21, 2011, 9:34:35 PM12/21/11
to pyth...@googlegroups.com
比烂是没底的,不信大家向东看去。。。

> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--

sj l

unread,
Dec 21, 2011, 9:36:39 PM12/21/11
to pyth...@googlegroups.com
好吧做个总结,大家继续增补,为了更好的Python!

严重的:
1. 我们需要BLOCK,强烈需要
2. GIL
3. 编译打包
4. py2到py3的兼容
5. accsi字符串而不是unicode,特别是操作文件系统的那些函数,搞死你
6. 多线程并发(支持native thread是个错误)
7. 既然__eq__为神马__ne__
8. classobj与type这两个东西确实该去掉一个,鸡乎?蛋乎?(Python 3去掉了classobj)----这货太绕口令了
9. 区分表达式和语句(我开始喜欢万能的lisp了), 我们需要(foo = []).append(42) 而不是foo = []; foo.append(42)
10. 弱到不能再弱的lambda,py3的更弱
11. closure
12. 操蛋的文档,参数什么类型,返回值什么类型,会不会抛异常,抛神马异常都大多都木有说明
13. 操蛋的元编程,反正我看不懂
14. 操蛋的OO实现(比如logging库操蛋)
15. 木有用的库在标准库中一堆(xml,sgmllib,HTMLParser...),最有用的库不是标准库中(chardet,...),清理!!!
16. unix socket性能不好,sendfile都木有,支持不完整(比如库readline,ncurse)
17. 木有标准的IPC函数
18. fucking local domain,我脑细胞twisted了,另外py3加nonlocal的方案也太难看了~,不能搞成lisp的env那种吗?
19. easy_install 不强,pip也还不够好(看看apt!)
20. 沙盒不够好
21. 协程的支持也是个问题,py3虽然很快会支持yield from,可是这货的体验根本没法跟greenlet比
22. 正则表达式不支持Unicode-aware regular expressions
23. dict,list这些不能被subclass,抓狂呀
24. 糟糕的库命名(copy.copy, 而不是copy, BaseHTTPServer而不是http.baseserver,UnitTest.assertEqual,而不是UnitTest.assert_equal例子太多了!!!参考pep8)

1. 性能,这个一般不是问题
2. 多核,反正线程使用很纠结,多进程来吧(通信麻烦些?)
3. IDE
4. 嵌入到C麻烦
5. 商业支持少
6. 尾递归优化,龟叔的说法是为了更好的异常回溯
7. ''.join(),这个我不同意
8. 框架多,我觉得不是问题,因为wsgi太简单了,大家都能写出框架是很好的
9. 手机app开发不给力,木有像 pyqt那种货呀(貌似meego有?)

2011/12/22 sj l <shuxi...@gmail.com>

bhuztez

unread,
Dec 21, 2011, 9:41:42 PM12/21/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
这些语言具体实现的时候都是用函数调用去模拟消息的,就看你怎么理解了。你认为它是发消息那就是发消息,你认为不是那就不是。这方面真没有谁更优越的,
大家都很烂。

在一个Object内部,用函数调用去模拟消息还算是合适的,如果在Object之间还用函数调用去模拟就很别扭了。这些语言都试图让这种方法看上去不
那么别扭,谁都不敢去实现真正的消息机制。

Zoom.Quiet

unread,
Dec 21, 2011, 9:49:56 PM12/21/11
to pyth...@googlegroups.com
在 2011年12月22日 上午10:36,sj l <shuxi...@gmail.com> 写道:
> 好吧做个总结,大家继续增补,为了更好的Python!
>

真心高兴引出了这么多干货! 收录:
http://wiki.woodpecker.org.cn/moin/MiscItems/2011-12-21

pansz

unread,
Dec 21, 2011, 10:06:10 PM12/21/11
to pyth...@googlegroups.com
2011/12/22 sj l <shuxi...@gmail.com>:
> 1. 性能,这个一般不是问题

服务器端,确实不是大问题,桌面端,性能问题大了。

就弄个还算简单的UI程序:Ulipad,这算是写得不错的程序了吧?你把焦点移到菜单上,然后按住左键从右扫到左(就是循环切换各个子菜单),程程程CPU就上100%了,而且还卡,我发现这还真不是程序员的问题,而是只要纯
python 做的 UI ,界面必卡。实验对象:1.6G双核这种级别的电脑,对于PC来说算是低配置,但是这已经比顶级手机的配置更高,如果这种界面切换的性能都达不到,python
在手机上还有什么戏?

Lan Soda

unread,
Dec 21, 2011, 10:18:41 PM12/21/11
to pyth...@googlegroups.com
看总结出来的这个架势,怎么感觉大家希望获得一种宇宙无敌万能的语言?!

# py2到py3的不兼容这也算py的缺点?
变革就是要牺牲短期利益获得长期利益的,你可以选择用py2来写程序,也可以选择py3写,或者是重构。如果py3对py2无缝兼容了,那还搞py3有什么意义呢?
就像c++对c的兼容性确实好,但是c++包含了所有c遗留下来的诟病,所以c++并不能根本上解决c的致命问题,同时又徒增了复杂度,而且c++是反紧凑性的,其发明人已经坦言不指望任何一个程序员完全理解c++。大部分写c++程序的人只是在用c的语法写c++。你们希望看到人们用py2的不良特性写着py3下面能跑的程序吗?

# ascii字符串而不是unicode?我认为字符串这个概念,就应该是unicode的,不分什么ascii,gb2312,utf8的,因为字符串就是“文字”!py3在这一点上做得很对!

# 多线程并发?引用一句都知道的大牛说的话“线程是那些进程生成代价昂贵,不支持简单RPC的系统上的废品。它需要彼此间依赖过多的状态标志和底层细节”。你想获得优良的多核性能,就在UNIX/Linux下面设计多进程程序!而不是要求py去完美支持这些微软搞出来的烂概念!

# 区分表达式和语句?我不觉得foo = []; foo.append(42)有什么不好,至少从代码可读性上来讲。代码大全里也提倡,应该把一行物理单元只对应一行逻辑单元,这样代码的可读性才会更好!

# 弱到不能再弱的lambda?lambda这个东西,可以用普通函数替代,而且个人感觉,lambda用多了,会让代码的可读性很低。py不是lisp,更不是图灵机!

# 还沙盒?还要什么?注册表重定向?加壳脱壳?

是你们用py能做什么,而不是py能做什么?关键在人不在工具。
各位猛拍~


在 2011年12月22日 上午10:36,sj l <shuxi...@gmail.com>写道:

Sgra Ekim

unread,
Dec 21, 2011, 10:33:01 PM12/21/11
to pyth...@googlegroups.com
我到觉得应该区分表达式和语句。有很多语句都是涉及状态改变的,那么对这些语句简单的返回一个None值有什么意义呢?Ruby里所有语句都有值,但大部分我觉得完全没用,也就if和cond这类返回值才用使用价值。但这种的效果其实不也是语法糖么?毕竟python提倡的还是面向过程编程吧?我觉的在非函数式的语言里这样做完全就是鸡肋。
 
对python有什么不满的话,刚刚想起来最好能加上perl,ruby那样的后置谓词。 例如 XX if YY, XX until YY这类真的很好用啊, 而且从形式上更接近自然语言了 = =

pansz

unread,
Dec 21, 2011, 10:37:09 PM12/21/11
to pyth...@googlegroups.com
2011/12/22 Lan Soda <h...@xxoogo.com>:

> # py2到py3的不兼容这也算py的缺点?
> 变革就是要牺牲短期利益获得长期利益的,你可以选择用py2来写程序,也可以选择py3写,或者是重构。如果py3对py2无缝兼容了,那还搞py3有什么意义呢?
> 就像c++对c的兼容性确实好,但是c++包含了所有c遗留下来的诟病,所以c++并不能根本上解决c的致命问题,同时又徒增了复杂度,而且c++是反紧凑性的,其发明人已经坦言不指望任何一个程序员完全理解c++。大部分写c++程序的人只是在用c的语法写c++。你们希望看到人们用py2的不良特性写着py3下面能跑的程序吗?

这是两回事:C++的发明者曾多次声称,C++ 是另外一种语言,并且他本人曾评价:C++唯一的缺点就是哪些与C兼容的部分。——至于用 C
的语法写 C++ 程序,在我看来那只是菜鸟程序员才做的事情。靠谱的程序员要至少应当把那些 C 代码封装成纯 C
库,好歹可以让这部分代码编译不需要 C++ 编译器。

另外发明 C++ 并不是因为 “C有什么不良特性”,而是因为“人们需要另外一种语言来做另外一些事情”,C语言在现在仍然生存得很好,它被用于做很多系统级得事情。C++仍然在主机游戏领域独领风骚。他们根本就是不同的语言。
C++ 从来就没有取代 C ,C 也没有取代 C++,C++98, C++1x 都在发展,而 C89, C99, C0x
也都在独立的升级发展。

如果 py3 的发明者说:这就是不同的语言,这个语言不叫 python,那么当然 P 话没有。
问题在于它从来没有说这是不同的语言,而是希望让 py3 替代 py2。这问题就出来了,人们 py2
用得好好的,你把语法改了做什么呢?还不兼容,有什么变革非要用修改语法的方式实现么?引入一种新语法,同时保证向后兼容不行么?更何况在很多标准的性能测试框架中,py3成绩还比py2低。

C99 能不能编译 C89 代码?C0x 能不能编译 C99 代码?都可以的!
C++1x 能不能编译 C++98 代码?也可以的!
py3 能不能跑 py2 代码?你们懂得。。。

> 多线程并发?引用一句都知道的大牛说的话“线程是那些进程生成代价昂贵,不支持简单RPC的系统上的废品。它需要彼此间依赖过多的状态标志和底层细节”。你想获得优良的多核性能,就在UNIX/Linux下面设计多进程程序!而不是要求py去完美支持这些微软搞出来的烂概念!

这个赞成。

> # 区分表达式和语句?我不觉得foo = [];
> foo.append(42)有什么不好,至少从代码可读性上来讲。代码大全里也提倡,应该把一行物理单元只对应一行逻辑单元,这样代码的可读性才会更好!

这个赞成。

> 弱到不能再弱的lambda?lambda这个东西,可以用普通函数替代,而且个人感觉,lambda用多了,会让代码的可读性很低。py不是lisp,更不是图灵机!

这个不赞成,lambda 函数就是匿名函数,应当具有普通函数的全部功能,否则就失去了意义。现在的 lambda
函数就是个试验品,连半成品都算不上。我宁可看到 lambda 被去掉,也不愿意看到如此残废的 lambda 功能。

Kabie

unread,
Dec 21, 2011, 10:38:53 PM12/21/11
to pyth...@googlegroups.com
有 XX if YY else ZZ

我觉得Python最麻烦的问题还是版本问题…………

Shell Xu

unread,
Dec 21, 2011, 10:38:16 PM12/21/11
to pyth...@googlegroups.com
无法获得一种万能语言和python语言有某些不完美两者没有逻辑上的关联。
另外,如果有一种非常复杂的第三方服务,只提供了C库。而你的web页面中需要调用这种服务,这时候,你有四种选项:
1.每进程模式,针对上万个请求生成进程
2.每线程模式,然后锁在GIL上
3.协程模式,然后反向C库,用python实现。
4.进程池模式,做请求转发,然后等待进程池回应。这个是唯一可用的选项。但是,在该种服务严重延迟的情况下(例如延迟20秒以上),一个req转发后需要等待进程处于idle状态长达20秒,而本地的CPU执行时间大概只有0.01秒。为了完美利用CPU,在16核的机器上,大约需要16*20/0.01=32000个进程。

在 2011年12月22日 上午11:18,Lan Soda <h...@xxoogo.com> 写道:

pansz

unread,
Dec 21, 2011, 10:42:28 PM12/21/11
to pyth...@googlegroups.com
2011/12/22 Shell Xu <shell...@gmail.com>:

> 无法获得一种万能语言和python语言有某些不完美两者没有逻辑上的关联。
> 另外,如果有一种非常复杂的第三方服务,只提供了C库。而你的web页面中需要调用这种服务,这时候,你有四种选项:
> 1.每进程模式,针对上万个请求生成进程
> 2.每线程模式,然后锁在GIL上
> 3.协程模式,然后反向C库,用python实现。
> 4.进程池模式,做请求转发,然后等待进程池回应。这个是唯一可用的选项。但是,在该种服务严重延迟的情况下(例如延迟20秒以上),一个req转发后需要等待进程处于idle状态长达20秒,而本地的CPU执行时间大概只有0.01秒。为了完美利用CPU,在16核的机器上,大约需要16*20/0.01=32000个进程。

如果你需要调用一个“非常复杂的第三方服务”,并且“0.01秒内会产生上万个请求”,你还会只有一台服务器?

智障

unread,
Dec 21, 2011, 10:44:48 PM12/21/11
to pyth...@googlegroups.com
block是啥,求科普。
退订: python-cn+unsub...@googlegroups.com (向此发空信即退!)

zhao shichen

unread,
Dec 21, 2011, 10:49:40 PM12/21/11
to pyth...@googlegroups.com
ruby的东西,据说,没用过,不知道啥用
呆痴木讷,君子四德

Shell Xu

unread,
Dec 21, 2011, 11:01:56 PM12/21/11
to pyth...@googlegroups.com
不是0.01秒出上万个请求,而是上万并发,每个在本机的处理时间大概是0.01秒。

智障

unread,
Dec 21, 2011, 11:13:16 PM12/21/11
to pyth...@googlegroups.com
插一句,如果要解决的问题只是这个的话,能否自动实现呢?
我们写程序,就必然要选择一种编码方式,能就用程序代码本身的编码方式,作为从str向unicode的转换方式呢?
当然,可能有的模块是用ascii写的,有的用的是unicode,我们同样可以用解决算术优先级的办法,进行转换啊。如果不能进行转换,就抛出个异常,作为编译器,也算仁至义尽了。



在 2011-12-22 08:24:53,pansz <pan.s...@gmail.com> 写道: >2011/12/21 依云 <lily...@gmail.com
>:
>> 如果你认为所谓的「编码问题」指的是这个的话你就大错特错了。Python 2 在引
>> 入 Unicode 后即混淆了 str 和 unicode----在一个需要字符串的 API,你既可以传
>> str 也可以传 unicode。有些 API 没处理好,如:
>>>>> os.path.join('中文', u'路径')
>> Traceback (most recent call last):
>>  File "<stdin>", line 1, in <module>
>>  File "/usr/lib/python2.7/posixpath.py", line 71, in join
>>    path += '/' + b
>> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
>
>2 其实不存在混淆 str 跟 unicode 的问题,需要 str 的地方会自动把 unicode 转成 str,需要 unicode
>的地方会自动把 str 转成 unicode。
>问题在于缺省的转换使用的 ascii 编码,因此只要含有中文的,一律不能通过 python2
>的"自动类型转换"。所以编程过程中凡是存在这种"自动类型转换"的环节,一律需要改成手动转换。----我以为只要理解这个,几乎可以解决python2
>90%以上的编码问题。
>
>> 经常会遇到这种情况。然后你 encode 或者 decode 一下就解决了。问题是,这种
>> 问题没有规律。
>我觉得很有规律。
>
>> 还有一个问题是,
>>>>> '中文'
>> '\xe4\xb8\xad\xe6\x96\x87'
>>>>> u'中文'
>> u'\u4e2d\u6587'
>> repr 的结果不可读。这意味你 print 一个 list 或者 dict 什么的,你看不到其
>> 中的中文。
>这个问题产生的原因跟上述是一样的,py2 缺省输出ascii ,不是 utf-8 。。。因而自然不能看到。
>但是如果你只是要 print 的话,一个非常非常简单的办法是:输出为 json,并指定为 utf-8 格式,json编码器增加
>default 函数为 repr(obj)。这样的输出几乎跟 repr 完全一致,除了那些乱码中文变成了真正的 utf-8 中文。
>
>
>其实说了那么多, py3 对国人唯一的重要改进仅仅是"缺省编码由 ascii 修改为了
>utf-8"而已。为了这点点改变去伤筋动骨的大修整个语言,并且弄得向后不兼容。有点太过了。简单的修改一下 python2
>源代码就能做到的事。。。
>
>-- 
>来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
>规则: http://code.google.com/p/cpyug/wiki/PythonCn

est

unread,
Dec 22, 2011, 1:53:20 AM12/22/11
to pyth...@googlegroups.com
block就是
{

}

2011/12/22 智障 <ias...@163.com>

Leo Jay

unread,
Dec 22, 2011, 1:59:49 AM12/22/11
to pyth...@googlegroups.com
2011/12/22 est <electr...@gmail.com>:
> block就是
> {
>
> }
>

如果python开始使用花括号,我就要考虑换语言了。
当初第一眼注意到这个语言就是看上它强制使用缩进这一点的。

那些人还挺奇怪的,喜欢其它语言的特性,但坚持使用python,为啥不去用已经支持花括号的语言呢?

--
Best Regards,
Leo Jay

zw g

unread,
Dec 22, 2011, 2:22:38 AM12/22/11
to pyth...@googlegroups.com
天真一下:

哪位E文好的, 能否将上述讨论,整理成章,翻译成英文,然后提交给Python开发的Core Team,或许能被接受并在未来发布更完善、更让我们喜爱的Python呢?

大家轻拍。

Gui


2011/12/22 Leo Jay <python...@gmail.com>

Lan Soda

unread,
Dec 22, 2011, 2:35:25 AM12/22/11
to pyth...@googlegroups.com
你对一个工具的要求过分苛刻,结果只能是你的思维局限于工具
你讲的例子太具专有性,而且我敢讲,针对你讲的例子能给出更优解决方案的大有人在。不能要求py去支持某某极端的环境

Lan Soda

unread,
Dec 22, 2011, 2:37:41 AM12/22/11
to pyth...@googlegroups.com
支持这位兄弟的观点
py如果加上了block,就不再是py了
你用py,如果不是因为她优美,就最好趁早用回java,用回php。因为你可能只是在用一种语言的习惯去写另一种语言的程序而已


Lan Soda

unread,
Dec 22, 2011, 2:42:05 AM12/22/11
to pyth...@googlegroups.com
所以py3才强制使用unicode,这本身就是一种自动实现
当然前提是你的代码文件是用unicode保存的,做到这个,在py3下,你用阿拉伯文写变量名也没问题

Leo Jay

unread,
Dec 22, 2011, 2:53:13 AM12/22/11
to pyth...@googlegroups.com
2011/12/22 zw g <peking...@gmail.com>:

> 天真一下:
>
> 哪位E文好的, 能否将上述讨论,整理成章,翻译成英文,然后提交给Python开发的Core
> Team,或许能被接受并在未来发布更完善、更让我们喜爱的Python呢?
>
> 大家轻拍。
>
> Gui
>

我的看法:
1. 上述讨论,就算在这几个讨论的人中间也不大可能达成一致意见,比方说我强烈反对花括号和匿名函数
2. 有的东西提意见容易实现起来难,比方说要提速,要去掉GIL。
3. 有的东西,像lambda,在3里面本来就要去掉的,后来N多人强烈要求才保留的,想加强?我看难。
4. 以我对python-dev的了解来看,他们对提意见(尤其是比较虚的意见)不是太热心。你有小改进,就给出patch,他们心情好,找个空看看,说不定就接受了。大意见的话,写篇漂漂亮亮的PEP,速度快的话,1,2年就能被接受。自己给个patch,以及对应的benchmark可能会加速一些。
你要是想着,去bugs.python.org扔个issue就跑,然后希望他们会快速反应,那也太不切实际了些,那里还有3000多issue没解决呢。
我不是在说他们不好,一个语言,谁随便提个想法,开发人员就改语言,这才是灾难。
5. 另外一些,比方说命名问题,unicode问题,他们已经开始做了,这方面3比2好不少。

maomao li

unread,
Dec 22, 2011, 3:00:28 AM12/22/11
to pyth...@googlegroups.com
不奇怪:
1、可以喜欢python的生态,在开源到处有python的种;
2、喜欢python的机制,就是动态类型;
3、喜欢python的库,主要是标准已经足够丰富;
4、喜欢python内置了一些实用而又常用的数据结构;
5、喜欢python的一些特性, 如装饰器,迭代器等;
6、喜欢python不定位为局限性语言;

缩进和花括号都有各自的优点和缺点。而我个人的认识来说,花括弧的缺点无非就是导致不统一,这其实可以用IDE或者工具解决的,而反过来缩的缺点进就解决不了。缩进的缺点主要是代码的印刷和发布上,一不小心被转换了就无法恢复。

针对这样的人群我发现JS已经非常接近了。但JS没有标准库和“标准解析器或者框架”,由于它出生在浏览器,而它在其他领域的库的生态可以说是及其小的。NODE?它是一个类似Twisted的东西而不是一个通用解析器,多数库都是针对它的机制而设计的。

Shell Xu

unread,
Dec 22, 2011, 3:10:07 AM12/22/11
to pyth...@googlegroups.com
我们说的其实都是差不多的观点,两害相权取其轻。通常性情况下,我也不建议多线程使用python。
不过GIL的问题始终是存在,而不是因为GIL,就说线程不合理。只能说,与其为了支持线程使用其他更恶心的语言,不如尽量避开GIL使用python。

Shell Xu

unread,
Dec 22, 2011, 3:13:08 AM12/22/11
to pyth...@googlegroups.com
> --
> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 发言: pyth...@googlegroups.com
> 退订: python-cn+...@googlegroups.com (向此发空信即退!)
> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

我觉得这才是正确的态度。我对python的吐槽一堆一堆,你可见过我去修改?
我自己写项目,做debian打包的结论是——除非是自己天天用的,否则鬼才高兴改。真的是个严重问题,绝对就自己想法搞定了。然后再去社区提交一下patch,大家看看——我也是,我也是。这个问题解决掉,这叫靠谱。
要是为了一点小细节问题就做东做西,很快志愿者就全跑光了。

maomao li

unread,
Dec 22, 2011, 3:18:24 AM12/22/11
to pyth...@googlegroups.com
补充一下:
要javascript更像python那样通用和成熟需要时间,而要python像javascript我个人而已之差个花括号,不要需要javascript的恶习。 而python的现状是摆在那里的,因此我选择放弃花括号也无所谓,因为那不是非常的大问题。

sj l

unread,
Dec 22, 2011, 3:30:08 AM12/22/11
to pyth...@googlegroups.com
py core team接不接受是一回事,讨论是另一回事,提不提又是另一回事

2011/12/22 maomao li <lwz...@gmail.com>

Marlon Yao

unread,
Dec 22, 2011, 3:36:57 AM12/22/11
to pyth...@googlegroups.com

2011/12/21 zhao shichen <shiche...@gmail.com>

总之,越来越多的“懂OO的java工程师“进入python领域,导致python越来越差劲
 
你这个结论下得好容易,你说的有几点是和java相关的?


在 2011年12月21日 下午6:10,zhao shichen <shiche...@gmail.com>写道:

1.很多标准库很烂;而很多很好的库竟然不在标准库之中,比如chardet等等,而xml之类没用的东西反而有
2.lambda演算太弱:如果有类似(x,y)->这样的语法就更好了;python3竟然进一步的削弱了lambda演算的能力
3.字符串的join看起来太奇怪了
4.发展了自己的一套正则表达式,直接用pcre不好吗。而且这个库的使用我感觉不友好。
5.听说python的unix域socket的性能不佳,仅仅是听说,在我的简单测试中感觉unix域socket的速度和普通socket速度一样:应该快一倍才对。
6.没有标准的IPC函数,比如共享内存,消息队列等,这些东西很有用阿
7.引入了太多java里面的垃圾概念,就是那些面向对象的东西。导致本来很简单的东西搞得很复杂,最典型的例子是logging模块,这个模块太烂了
 
先不说面向对象好不好,python本身主要就是面向对象的,面向对象也不只在java中有,好多语言都有,也不是最先自java始。至于logging模块,没错,完全模仿java中的log4j,确实有些不pythonic,但我没觉得它烂在哪里。
 
8.socke的函数支持不全,比如sendfile等等都没有支持
9.很不喜欢元类编程,把本来很简单的东西搞复杂,都是java里面的垃圾概念
 
python中元类编程是指metaclass还是指decorator?java中元类编程是指annotation?
decorator只是语法上和annotation有些类似,但两本质上完全不一样,pythoner基本上认为decorator是个好东西,所以我 认为你说的不是decorator。而metaclass和annotation无论形式和内容上都不一样,python中metaclass更相当于 java中的classloader。另外,java中的annotation在5.0才引入,而python中metaclass概念早在1.5就引入 了,你是怎么怪到java头上的。


在我的项目组中,基本上不准编写类,只允许编写函数,目的就是为了方便集成和控制代码;

不做评论。
 

象很多java项目比如eclipse一样搞得又大又臭是绝对没法接受的

 

智障

unread,
Dec 22, 2011, 3:45:02 AM12/22/11
to pyth...@googlegroups.com
看了你们的讨论,俺没信心了。
Python咋就这么差?汗一个
那个,那个,haskell才是王道?
--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
退订: python-cn+unsub...@googlegroups.com (向此发空信即退!)

zw g

unread,
Dec 22, 2011, 3:46:21 AM12/22/11
to pyth...@googlegroups.com
歪楼一下, 大妈这个话题真是一石激起千层浪啊! 平常听到的都是说Py的好,今日见识了。

我又想起一句话: 爱之深,责之切?
纯属打酱油呵呵。


2011/12/22 Marlon Yao <yaol...@gmail.com>

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)

Leo Jay

unread,
Dec 22, 2011, 3:53:04 AM12/22/11
to pyth...@googlegroups.com
2011/12/22 zw g <peking...@gmail.com>:

> 歪楼一下, 大妈这个话题真是一石激起千层浪啊! 平常听到的都是说Py的好,今日见识了。
>
> 我又想起一句话: 爱之深,责之切?
> 纯属打酱油呵呵。
>

有句话叫世界上只有两种语言,一种被人骂,一种没人用。
事实上,前面说的,有相当一些属于众口难调,而不是语言缺陷。

lee Alexander

unread,
Dec 22, 2011, 5:15:06 AM12/22/11
to pyth...@googlegroups.com
其实我是想知道这些牢骚能让龟叔看到么?

Felinx Lee

unread,
Dec 22, 2011, 5:27:02 AM12/22/11
to pyth...@googlegroups.com
你翻译下再转一下就ok。

2011/12/22 lee Alexander <superp...@gmail.com>



--
What can change the nature of a man?(Planescape Torment)
----------------------------------------------------------------------------------------
http://feilong.me            Felinx Lee's Blog (Chinese Only)
http://www.zhimaq.com IT Q&A (Chinese Only)
http://poweredsites.org  What powered your sites? PHP, Ruby or Python?

pansz

unread,
Dec 22, 2011, 7:19:24 PM12/22/11
to pyth...@googlegroups.com
2011/12/22 Marlon Yao <yaol...@gmail.com>:

> 先不说面向对象好不好,python本身主要就是面向对象的,面向对象也不只在java中有,好多语言都有,也不是最先自java始。至于logging模块,没错,完全模仿java中的log4j,确实有些不pythonic,但我没觉得它烂在哪里。

没想到它是来自 java,现在明白了。这些完全不顾效率跟优雅的大猛兽大都是从 java 来的。

这个可能主要是语法的优雅层面以及效率层面。首先学会配置这个 logger 需要至少阅读30分钟的文档(前提还是英文水平流畅),其次调用一个
logger 的开销有点大,再其次,当某个对应的级别被禁止的时候,剩余开销不能尽可能的小。

——觉得它不烂的,不妨用调试器跟踪看看调用一次 logger 究竟有多大的开销。更不妨试试对一个被关闭的级别,logger.debug
调用一次要花多大的开销。——一次 log 函数花如此大的开销对于 C 背景的人来说通常是不可接受的。

@@

unread,
Dec 22, 2011, 8:17:11 PM12/22/11
to pyth...@googlegroups.com
logging确实不好用。 文档还长的要命。
做点简单的事也得看一大段的文档。。

2011/12/23 pansz <pan.s...@gmail.com>

Musheng

unread,
Dec 22, 2011, 9:45:18 PM12/22/11
to pyth...@googlegroups.com
于 2011年12月22日 08:35, pansz 写道:
> 我觉得这些是缺点:
> 1。python3 的存在,python2 如果没缺点 python3 就不需要存在了,源代码还不兼容。这会造成不小的混乱。
> 2。没有一个堪比 Java 性能的 JIT 实时编译解释器。
> 3。源代码无法真正意义上的加密(当然解释执行类语言都有这个问题,Java 也一样,反编译太容易。。。而象 C++ 编译之后基本不可能反出源代码。)
>
> Python 目前为止主要用于服务器端,正因为解释型语言都不可能真正意义上的加密源代码,所以只有部署在服务器端能避免这个问题。
>
> 2011/12/21 Zoom.Quiet<zoom....@gmail.com>:

>> 在昨天内部分享交流中,俺回顾了 PyCon2011China 中透露出的 Py 最新使用/发展和体验;
>> 最后有同学问:
>> Python 有什么缺点!?
lua 去掉end的话我会使用lua

Marlon Yao

unread,
Dec 22, 2011, 10:13:00 PM12/22/11
to pyth...@googlegroups.com


2011/12/23 pansz <pan.s...@gmail.com>

2011/12/22 Marlon Yao <yaol...@gmail.com>:
> 先不说面向对象好不好,python本身主要就是面向对象的,面向对象也不只在java中有,好多语言都有,也不是最先自java始。至于logging模块,没错,完全模仿java中的log4j,确实有些不pythonic,但我没觉得它烂在哪里。

没想到它是来自 java,现在明白了。这些完全不顾效率跟优雅的大猛兽大都是从 java 来的。
据log4j作者称,log4j性能很不错,很灵活,至于是否优雅,仁者见会智者见智。logging模块没有跳出java思维,不pythonic,很多类和接口,python中其实可以直接用函数。
 
这个可能主要是语法的优雅层面以及效率层面。首先学会配置这个 logger 需要至少阅读30分钟的文档(前提还是英文水平流畅),其次调用一个
logger 的开销有点大,再其次,当某个对应的级别被禁止的时候,剩余开销不能尽可能的小。
赞成。我熟悉log4j,配置还老出错。
 

——觉得它不烂的,不妨用调试器跟踪看看调用一次 logger 究竟有多大的开销。更不妨试试对一个被关闭的级别,logger.debug
调用一次要花多大的开销。——一次 log 函数花如此大的开销对于 C 背景的人来说通常是不可接受的。 
debug级别关闭,还要花很大开销,那可以报bug了。
 
这些完全不顾效率跟优雅的大猛兽大都是从 java 来的。
 
你说说还有哪些是“不顾效率跟优雅的大猛兽”?

python中模仿java的还有threading。
threading库基本模仿java,包括python3中的concurrent。大家不喜欢python线程,并不是因为库,而是GIL.


Marlon Yao

unread,
Dec 22, 2011, 10:29:42 PM12/22/11
to pyth...@googlegroups.com
python2缺点,竟然没人提到模块总是优先导入当前路径下模块,尽管python3已经解决了。

2011/12/23 Marlon Yao <yaol...@gmail.com>

jjx

unread,
Dec 22, 2011, 11:09:54 PM12/22/11
to python-cn(华蟒用户组,CPyUG 邮件列表)
__new__据说是类型化不可变类型的需要
lambda 得确是不怎么样,不过这样约定倒是代码可读性不会太差,如果像js那样,一团糟啊

oo不oo,其实在于你怎么看

On Dec 22, 10:11 am, CJ <jamcha...@gmail.com> wrote:
> 不要老是这样说吧,不能因噎废食,我看GTK库的C语言接口时,发现实例方法在C中的实现无非是将this struct一致作为函数第一个参数而
> 已。
> 你要是在Python中,明明可以写成socket.read(length)的,非要写成read(socket,length),然后方法名又会冲
> 突,又要写成socket_read(socket,length)或是socketlib.read(socket,length),不成了胡折腾了
> 吗,呵呵
>
> 我想起了程序员A,发现Event、Observer很好用很灵活(那个面向事件面向消息编程嘛),就所有的调用都bindEvent再那个
> triggerEvent,明明只需要一个callback就解决了,非说Event更灵活更具可扩展性
> 就像那些刚看了些OO设计模式的,就在10行代码内用了20种设计模式,这就是那些"懂OO的Java程序员"干的事
>
> 然后另一个程序员B,看了些Lisp,然后就一个劲的在python中lambda map reduce filter ,明明用Class,用对象
> 实例来表示更方便的,非要把变量放到closure中,然后就像个黑盒子一样调方法。。。。然后这些程序员还喜欢不用if else,非要用and
> or什么的。悲催啊
>
> Python中的OO和lambda确实实现的不咱地,有谁能解释下__new__与__init__的功能??这方面Ruby又是一个好的学习对象,
> Ruby比Java更OO,但更具有一致性,比如new也是一个方法(Ruby中的说法是向对象发送一个new的消息,又是面向消息嘛,呵呵)
>
> 我喜欢Ruby的一个原因是它其实像Lisp+Smalltalk。说起来,论OO特性,Python没地位,论FP特性,Python也没地位,论标
> 准库,Python的工具库很多,但标准库似乎有些Out。剩下的只有Python语法简单了,但Python还有神马的元编程,多继承,我我
> 我。。。
>
> 所以用Python,即不要太OO,也不要太FP,因为它在这两方面都不擅长(我只说不要太OO,太FP,不是说不要OO,不要FP哦,呵呵)。也不要
> 指望Python运行速度多快,在这方面我已经开始使用Go语言了。
> Keep it simple,才是Python之禅!^O^


>
> On Dec 21, 6:17 pm, zhao shichen <shichen.z...@gmail.com> wrote:
>
>
>
>
>
>
>
> > 总之,越来越多的"懂OO的java工程师"进入python领域,导致python越来越差劲
>

> > 在 2011年12月21日 下午6:10,zhao shichen <shichen.z...@gmail.com>写道:
>
> > > 1.很多标准库很烂;而很多很好的库竟然不在标准库之中,比如chardet等等,而xml之类没用的东西反而有
> > > 2.lambda演算太弱:如果有类似(x,y)->这样的语法就更好了;python3竟然进一步的削弱了lambda演算的能力
> > > 3.字符串的join看起来太奇怪了
> > > 4.发展了自己的一套正则表达式,直接用pcre不好吗。而且这个库的使用我感觉不友好。
>
> > > 5.听说python的unix域socket的性能不佳,仅仅是听说,在我的简单测试中感觉unix域socket的速度和普通socket速度一样:应该快 一倍才对。
> > > 6.没有标准的IPC函数,比如共享内存,消息队列等,这些东西很有用阿
> > > 7.引入了太多java里面的垃圾概念,就是那些面向对象的东西。导致本来很简单的东西搞得很复杂,最典型的例子是logging模块,这个模块太烂了

> > > 8.socke的函数支持不全,比如sendfile等等都没有支持
> > > 9.很不喜欢元类编程,把本来很简单的东西搞复杂,都是java里面的垃圾概念
>
> > > 在我的项目组中,基本上不准编写类,只允许编写函数,目的就是为了方便集成和控制代码;
>
> > > 象很多java项目比如eclipse一样搞得又大又臭是绝对没法接受的
>
> > > --
> > > 呆痴木讷,君子四德
>
> > --
> > 呆痴木讷,君子四德

pansz

unread,
Dec 22, 2011, 11:47:36 PM12/22/11
to pyth...@googlegroups.com
2011/12/23 Marlon Yao <yaol...@gmail.com>:

> 据log4j作者称,log4j性能很不错,很灵活,至于是否优雅,仁者见会智者见智。logging模块没有跳出java思维,不pythonic,很多类和接口,python中其实可以直接用函数。

java 倾向于过多的封装化抽象化层级,本来一个函数能解决的问题可能要花四级函数调用加三四个不同的类实例去解决。

解释型语言中,没有哪个的 JIT 能跟 Java 比的。很多胶水代码都被优化掉了。所以 Java
这么做,副作用不太明显,但在其他语言中这么做不合适了。直接抄 java 代码框架效率肯定会偏低。

Sparkle

unread,
Dec 23, 2011, 2:46:25 AM12/23/11
to pyth...@googlegroups.com
����
py3�ռ�
�����

�� 2011/12/21 14:24, Zoom.Quiet �:
> �������ڲ����?����,���ع��� PyCon2011China ��͸¶���� Py ����ʹ��/��չ������;
> �����ͬѧ��:
> Python ��ʲôȱ��!?
>
> ֱ��HOLD ס�˰���˼·...
> - ��Ҳ��!?
> - ������û������������
> - Python ��ȸ��ֿ�������Ҳ��ȱ��,��Ȼ��!
> ����,��ʲô��?!
>
> - û�� {} ?
> - ��֧�ֶ�CPU ?
>
> �����ѧϰʹ�ù����,�� Python ��ʲôʧ��ĵط�?!
> - ��������
> - ���ڲ������,��������Ŭ���ķ���..
>
> PS:
> - ���ֳ�����Ļش���:
> - ���� Py ��ʷ�ϻ��۵ĺ���ģ��̫�࣬�ᵼ�¿�����Ա������裬��˼��ȡ������ʲô������ֱ���ѳ����õ��ֳ�ģ����!
>

智障

unread,
Dec 23, 2011, 3:48:30 AM12/23/11
to pyth...@googlegroups.com
我只大体一说,详细的,自己查资料去,因为我知道的也不多。
首先是generator,
def f():
i = 0
while True:
yield i
i += 1
然后,yield扩展,可以接受一个值。你给generator send一个值,这个值就传给yield i,作为yield的值。接受值后,generator将会在这个点重新执行。
def f_extend():
while True:
i = 0
x = yield i
i += 1
g = f(); g.next(); g.send(5); 那么g里面的那个x的值就是5。如果你有两个generator就可以相互send点儿什么,模仿生产者和消费者了。
在 2011-12-23 15:46:25,Sparkle <pop...@gmail.com> 写道:
>性能
>py3普及
>包管理

>
>于 2011/12/21 14:24, Zoom.Quiet 写道:
>> 在昨天内部分享交流中,俺回顾了 PyCon2011China 中透露出的 Py 最新使用/发展和体验;
>> 最后有同学问:
>> Python 有什么缺点!?
>>
>> 直接HOLD 住了俺的思路...
>> - 是也乎!?
>> - 世界上没有完美的语言
>> - Python 相比各种开发语言也有缺点,当然的!
>> 可是,是什么呢?!
>>
>> - 没有 {} ?
>> - 不支持多CPU ?
>>
>> 大家在学习使用过程中,对 Python 有什么失望的地方?!
>> - 兼听则明
>> - 现在不满意的,就是我们努力的方向..
>>
>> PS:
>> - 俺现场憋出的回答是:
>> - 由于 Py 历史上积累的好用模块太多,会导致开发人员更加懒惰,不思进取,不论什么都可以直接搜出可用的现成模块来!
>>
>

Ning

unread,
Dec 25, 2011, 1:02:52 AM12/25/11
to pyth...@googlegroups.com
1、不知道为什么这么多人喷C++的多重继承。C++的多重继承的实现是非常优雅的,同时也非常容易理解,性能相比单继承的损失也就this指针加减的一点点。坑爹的是虚继承,凭空引入超高的复杂性。
很多时候多继承是非常有用的,毕竟继承就是为了复用,复用基类的实现。而不是像Java那样继承接口单纯就是为了声明一个协议。
2、用Unicode是大势所趋,Windows自NT起就全部用了Unicode,即使是英文版。wxWidgets 3也是全部用了Unicode。
其实ASCII是非常坑爹的东西,尤其要处理中文的时候。譬如“-12 -22 -23 -56”代表两个汉字,那么查找一个编码为“-22 -23”的汉字居然也会成功匹配,无可饶恕啊。
总之,ASCII见鬼去吧~

Shell Xu

unread,
Dec 25, 2011, 1:13:41 AM12/25/11
to pyth...@googlegroups.com

c++的多重继承会改变指针类型转换特性。
要么他干脆彻底不兼容c。

from miui

--

Ning

unread,
Dec 25, 2011, 1:28:30 AM12/25/11
to pyth...@googlegroups.com
我觉得这不是什么大问题,假如需要指针强制转换(dynamic_cast?),应该不算一个好的设计。
转换应该用虚函数,由编译器帮你完成

段洪义

unread,
Dec 25, 2011, 6:10:35 AM12/25/11
to pyth...@googlegroups.com
谈谈logging和threading

LOG4j能够满足我对LOG的所有要求,Logger Appender Layout以及日志级别的继承,自定义Appender。我觉得这一切都设计的都非常优雅,已经成为日志记录的工业标准。很多时候我们需要的是一个日志 系统,而不是print,所以我认为loggging是python中设计的比较系统的模块了,尽管有些东西没有学好。

threading的确是模仿java设计的,很多函数都一样但是同java1.5以前的版本一样,功能比较弱,很基础。当我看见 concurrent时候,我一下就乐了。这个是java的并发类库的阉割版。java的concurrent我觉得是目前java中设计最为合理的一个 类库,无论从设计思路还是类结构都把传统的并发模型做到了极致,它是由Doug Lea亲手操刀。

虽然python的类库比之java普遍偏低。但是由于朴实简洁优雅的语法以及较少的语法二意性,所以很多时候python类库有bug随手就改了。

我觉得python未来有一下几点可以做:

1 减少基础类库中的等价函数,现在能做同样功能的函数和模块比较多。

2 去掉GIL或者去掉threading,选择其一。由于GIL使得python的多线程比较残。但是多线程大部分情况下可以用协程和多进程代替。所以去掉也无妨。

3 更强大的虚拟机,目前python虚拟机无论从GC还是内存管理方面都无法与JVM比较,所以从这一点上看还是比较期待pypy

4 靠谱的移动平台支持。

5 基础的协程类库或者是制定一套标准,可以作为第三方开发协程的基础。现在非官方的协程库比较多,但是协程在未来编程语言上应该是基础的标配而不应该像现在一样百花齐放,基础的协程库一套即可,倒是周边设施比较重要。 不然不同类库编写协程无法通用,造成很多时候不同的平台做同样的事情。

6 对于第5条的扩展,类推其他的被第三方普遍实现多次的非标准类库。

以上只是随想,有待补充。



--
士不可以不弘毅,任重而道远。仁以为己任,不亦重乎!死而后已,不亦远乎!

无知的TonySeek

unread,
Jan 29, 2012, 11:26:04 AM1/29/12
to pyth...@googlegroups.com
在 2011年12月21日星期三UTC+8下午4时57分30秒,CJ写道:
Python的Object & Class 系统有逻辑上的问题
1. Object支持了__eq__方法,为什么还要实现__ne__方法?很基本的哲学道理,一个可推导的世界中,A==B为真,则A!=B一定为
假,__ne__方法大家都不会用,那就应该人Python中去掉,免得引起混乱

如果去掉 __ne__ 的话 SQLAlchemy 一类依赖操作符重载来定义小语言的工具就死了……
 
2. classobj与type这两个东西确实该去掉一个,鸡乎?蛋乎?(Python 3去掉了classobj)
 
如果在 Python 2 不用 old-style class 也比较难遇到 clsssobj 嘛(当然老的标准库就没办法了,tk 一类)


Python的字符串unicode,寄期望于Python 3
Python的lambda只支持表达式,Python仍然区分表达式与语句,这点导致lambda里没了if(虽然你也可以找很多其它的理由来解释
lambda里的代码不应写得复杂),还有Python的closure

Python函数的tail_call_optimize

"".join 你懂的,Python有些库的方法命名有些奇怪,有些有下划线,有些没有下划线。有些类是全小写,有些类是Camel,Java这些方
面就很好。。。。历史遗留问题啊

同意 = =~
 

Python的文档????我看django文档时,只想着一句话:Read The Fucking Source Code!!!有些函数的文档我
看半天还是没搞清楚倒底怎么个用法,一是函数参数没有类型说明,另一方面,我还是比较喜欢直接的example。(感觉Java的API文档也要比
Python的好很多喔,整洁不少)。

目前就只想到这些 ^O^


On Dec 21, 2:24 pm, "Zoom.Quiet" <zoom....@gmail.com> wrote:
> 在昨天内部分享交流中,俺回顾了 PyCon2011China 中透露出的 Py 最新使用/发展和体验;
> 最后有同学问:
>     Python 有什么缺点!?
>
> 直接HOLD 住了俺的思路...
>     - 是也乎!?
>     - 世界上没有完美的语言
>     - Python 相比各种开发语言也有缺点,当然的!
>     可是,是什么呢?!
>
> - 没有 {} ?
> - 不支持多CPU ?
>
> 大家在学习使用过程中,对 Python 有什么失望的地方?!
> - 兼听则明
> - 现在不满意的,就是我们努力的方向..
>
> PS:
> - 俺现场憋出的回答是:
>     - 由于 Py 历史上积累的好用模块太多,会导致开发人员更加懒惰,不思进取,不论什么都可以直接搜出可用的现成模块来!
>
> --

无知的TonySeek

unread,
Jan 29, 2012, 11:28:08 AM1/29/12
to pyth...@googlegroups.com
太认同你的观点了,每一条都一针见血。

在 2011年12月21日星期三UTC+8下午6时56分42秒,shhgs写道:
问题还是很多的

1. 匿名函数。Py3一度要取消lambda,脑残了不是。正确的做法应该是进一步加强lambda,搞匿名函数
2. 莫名其妙的local域。我写twisted的时候,没少吃药。稍微不留神就掉坑里。
3. 很多类库的port都不完整。socket,readline,ncurse 。。。
4. 为什么要区分表达式和语句?有这个必要吗?表达式全部返回None,或者专门定义一个Void岂不是更好?
5. Py的标准类库应该修订一下了。标准类库的质量良莠不齐,有些类库明显落伍。htmllib,
sgmllib ,HTMLParser,现在还有人用吗,为什么不用lxml?re,建议用pcre;ConfigParser,建议去掉。
6. 进一步增强easy_intall。应该设计类似rpm, dpkg这样的Python library package。以类似yum,apt的方式分发这种包。


On Wed, Dec 21, 2011 at 02:24:04PM +0800, Zoom.Quiet wrote:
> 在昨天内部分享交流中,俺回顾了 PyCon2011China 中透露出的 Py 最新使用/发展和体验;
> 最后有同学问:
>     Python 有什么缺点!?
>
> 直接HOLD 住了俺的思路...
>     - 是也乎!?
>     - 世界上没有完美的语言
>     - Python 相比各种开发语言也有缺点,当然的!
>     可是,是什么呢?!
>
> - 没有 {} ?
> - 不支持多CPU ?
>
> 大家在学习使用过程中,对 Python 有什么失望的地方?!
> - 兼听则明
> - 现在不满意的,就是我们努力的方向..
>
> PS:
> - 俺现场憋出的回答是:
>     - 由于 Py 历史上积累的好用模块太多,会导致开发人员更加懒惰,不思进取,不论什么都可以直接搜出可用的现成模块来!
>
> --
> 人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
> 俺: http://about.me/zoom.quiet
> 文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/
>

Coleman

unread,
Feb 2, 2012, 3:04:02 AM2/2/12
to pyth...@googlegroups.com
潜了好长时间水了,这回有一点想法:Python要是能推出类似enum,
interface等元素,完善oop支持就好了,现在的oop尽管够用,还是比不上java。

还有就是那个self,尽管增加了python的弹性,却让人很不习惯,为什么不在每次函数值行前把self弄到namespace里呢?这样就不用把它放在方法的签名里了。

在 Mon, 30 Jan 2012 00:26:04 +0800,无知的TonySeek <tony...@gmail.com>
写道:
--
使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/

依云

unread,
Feb 2, 2012, 4:15:41 AM2/2/12
to pyth...@googlegroups.com
On Thu, Feb 02, 2012 at 04:04:02PM +0800, Coleman wrote:
> 潜了好长时间水了,这回有一点想法:Python要是能推出类似enum, interface等元素,完善oop支持就好了,现在的oop尽管够用,还是比不上java。
>
> 还有就是那个self,尽管增加了python的弹性,却让人很不习惯,为什么不在每次函数值行前把self弄到namespace里呢?这样就不用把它放在方法的签名里了。

我还是更喜欢显式指定 self,这样方法和函数更像,很多时候可以混在一起用,
比如方法来自内建、函数来自插件的时候。

而且还可以这样用:SomeClass.somemethod(self, args)。比如 SomeClass 是自
己的某个指定超类。

其实,我很希望方法是函数的子类就好了。

至于 interface,我觉得 golang 做得最好(虽然我已经不太记得了)。Java 里
要求太严了,必须自己说实现了某个 interface 才行,interface 的要求都实现
了不「办证」都不行,而且 interface 里不能提供默认值。假设定义个 Eq
interface,实现它的类实现了相等性比较:== 和 != 两个方法。在 Java 里,所
有实现 Eq 的类都得实现这两者,而不能说,如果其中之一没有实现,那么没实现
的那个就是另外一个值的取反。

> --
> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 发言: pyth...@googlegroups.com
> 退订: python-cn+...@googlegroups.com (向此发空信即退!)
> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
Best regards,
lilydjwg

Linux Vim Python 我的博客:
http://lilydjwg.is-programmer.com/
--
A: Because it obfuscates the reading.
Q: Why is top posting so bad?

无知的TonySeek

unread,
Feb 7, 2012, 5:29:17 PM2/7/12
to pyth...@googlegroups.com
在 2012年2月2日星期四UTC+8下午4时04分02秒,油菜写道:
潜了好长时间水了,这回有一点想法:Python要是能推出类似enum,  
interface等元素,完善oop支持就好了,现在的oop尽管够用,还是比不上java。

enum 可以用 class 代替。interface 没有必要吧?Python 倡导鸭子类型,interface 的类型化作用不存在;Python 可以多重继承,用 Mixin 的话 interface 更是没有存在的理由。Ruby 甚至是运行在 JVM 上的 Scala 都没有接口的设计,接口本身就是一种贫血的 Mixin Class。

毕竟 Python 语言设计的一大优点就是紧凑性,加了这些反而很恶心了。至于反紧凑型,可以看 C++ 的例子。
 

还有就是那个self,尽管增加了python的弹性,却让人很不习惯,为什么不在每次函数值行前把self弄到namespace里呢?这样就不用把它放在方法的签名里了。

有 self 比没有要多很多好处的,显式的 self 可以手动控制从函数到 bound method 的过程,元编程的角度非常有用,比如实现 Ruby 里面作为语言特性来实现的“特异方法”(是这么翻译的么,《松本行弘的程序世界》中文版是这么叫的)。

无知的TonySeek

unread,
Feb 7, 2012, 5:37:07 PM2/7/12
to pyth...@googlegroups.com
Ruby 玩概念而已,就是匿名函数。一般用来做 callback,可以实现 Python 里面用 with 上下文或者装饰器实现的东西。

# python
with trans() as db:
    db.xxx()

# 等价的 ruby
trans() do |db|
  db.xxx
end

----------------

# python 
@require_logined
def home():
    print("xxx")

# 等价的 ruby
def home()
  require_logined() { puts "xxx" }
end

不过 Ruby 里面的 block 和 lambda 是区分了的,block 比 lambda 更低一层,可以看成是没有被包装成“函数对象”的匿名函数。

其实我觉得 Python 用 callback 不方面不是因为没有 block 而是因为缩进…… Ruby 的 block 都有 do-end 或者花括号来包围的……
It is loading more messages.
0 new messages