2012-07-24

Cpy是如何打败Python的

Views: 34825 | 48 Comments

Python 语言的初学者, 特别是"惊奇者"(也就是那种第一眼就被毫无意义的某些特性吸引, 之后持续说服自己的人)认为 Python 不需要 C 语言的 for 语句, 因为他们能用优雅的 Python for 来代替类 C 的 for.

Cpy 的循环方式:

for(i=s; i<num; i+=step){
}

Python 的循环方式:

for i in range(num)[s:e:step]:

最近, 我写了一个循环 100000000 遍的代码, 不幸的是(也正是所预计的), Python 把机器内存吃光了, 并让我的 Windows 报虚拟内存不足的错误. 可怜的 Python 只能被操作系统无情地 kill 掉而不给任何机会.

而 Cpy 的循环却毫无压力, 只占用了很小的内存.

Related posts:

  1. 开始学习 Python
  2. 用C语法来写Python代码
  3. PyPy – 吞下自己尾巴的小蟒蛇
  4. PHP求天数常犯的错误
  5. 我要转到 Windows 平台了
Posted by ideawu at 2012-07-24 12:17:20 Tags:

48 Responses to "Cpy是如何打败Python的"

  • 标题党哇 Reply
    @muxueqz: 囧,我是怨念有多深,这么晚还来评论重复的内容。。。。 Reply
  • 如果您用xrange时,能用浮点数,那么可能版本不一样吧。
    反正我这里用不了。因此,才要用yield做自己的generator。

    不过呢,我希望您不要转移话题,因为我是建议您看看那篇文章,然后再交流。
    当然,如果您的水平很高,理解很深入,是没必要看的。 Reply
  • 对于generator,我有些想法(来自python cookbook)。可以把C中这种
    for(i=s; i<num; i+=step){
    }
    产生 i 的逻辑,置入generator中。
    定义:

    def frange(start, stop, step):
    << Implementaion >>

    而用的时候,只需要

    for i in frange(start, stop, step):
    print i Reply
    @mirguest: 你可以看看 Python 的 xrange(start, end, step) Reply
  • 在编程语言的创造方面,我并没有经验。由于并非学计算机,很多知识都不知道。但最近看了一本叫做UNIX编程艺术的书,受益匪浅。
    我觉得,如果您要创建一个新式语言,必须有自己的整套框架。而并非东拼西凑,做出一个四不像。
    又或者说Brooks的人月神话吧,那个作者似乎非常强调一致性。

    您可以认为我有些照本宣科。但我还是希望您能够仔细考虑,设计出一个较好的语言。 Reply
  • 我觉得lz一直无视我说的Generator啊。
    真是失败。 Reply
    @mirguest: 欢迎交流. 你可以介绍下你所理解的 generator. Reply
    @ideawu:
    我以前对generator的理解也不是很懂。后来,看了一本叫python cookbook的书,里面就有专门讲generator和iterator的章节。例如,要产生一个浮点型的序列,我们就可以用generator,而且,关键在于,我们的generator可以是无限用下去的。
    后来,看来一位大牛的介绍,http://www.dabeaz.com。他在08年的PyCon中,就介绍了generator,http://www.dabeaz.com/talks.html。
    当然,我本身技术不如您。但是generator的应用,可以在数据流动方面如管道一般优雅。
    因此,我一直是问您,在您的Cpy中是否应该考虑这些? Reply
  • 猜想博主用的是 Python 3.x,因为 2.x 中 range 不能接受太大的数值作为参数。但对 generator 做 slicing 时如果指定 step,Python 需要先取得所有 item,这样就失去了迭代的意义。这确实是个弱点,但可以通过改变写法来解决。这样比较窃以为不是很公平。毕竟每种语言都需要一些特殊的方式来规避自身的弱点。 Reply
  • 标题党哇!要是能利用上pypy就好了 Reply
    @muxueqz: pypy 确实有不少值得借鉴的地方. Reply
  • KingOfDoubleCat 2012-08-02 at 20:24:19
    我是来围观的 Reply
  • 我觉得博主一直回避不用 xrange 而用 range 的原因,还是有卖萌的嫌疑的。 –推特观光团 Reply
  • 呵呵,可能我知识和您相差很悬殊。

    我其实是给您的语言(Cpy)一个建议,就是关于生成器(Generator)的。
    我分析了您的代码,发现似乎没有这样的功能。

    仔细看了您的简介后,您的确是经验丰富。
    惭愧,纠缠了您这么久。 Reply
    @mirguest: 其实我觉得博主跟你讨论了那么久,你们的话题没有讨论到点子上,即“何谓回朔的思维”这一点。
    and C语言之所以要有main函数是因为它是一门需要编译的语言,要翻译成二进制,程序需要有个入口点,main函数正是这个入口点。而Python是一门动态的语言,所以可以省去。 Reply
    @AlsoTang: 我确实发现我没有理解 mirguest 的意思… Reply
    @ideawu: 我觉得是mirguest的问题,是他没有理解“回溯思维”这四个字。 Reply
    @AlsoTang:
    真是惭愧,的确不懂。 Reply

« [1][2] » 1/2

Leave a Comment