• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Python和Ruby循环语句的效率问题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我可无意贬低Python和Ruby的性能,我也不想在这讨论语言性能这个问题。所以提刀拎砖进来的各路神仙请息怒,我只是无意之中碰到这这个可能是很多初学者都会碰到的问题。对于初学者,应该以理性的说服教育为主,胡砍乱拍是不对滴。

 

这两天考虑基于Bellman-Ford尝试实现我的想法。昨天睡觉之前完成了Python的实现,可是程序跑起来之后居然就像死了一样。我跟进去发现,慢的地方就在Bellman-Ford的那个嵌套循环的地方。然而实际上,我的输入规模并没有大的那么恐怖,有16108个顶点和10310条边,也就是一个16108×10310的循环而已,所以应该不至于把程序拖死吧。于是我做了下面的实验,分别在c#、Python和Ruby中进行了测试。代码如下,非常简单:

 

1. C#

 1using System;
 2
 3public class App
 4}

 

2.  Python

1counter = 0
2for i in range(16108):
3    for j in range(10310):
4        counter = counter + 1
5        
6print "Counter is: " + str(counter)


3. Ruby (没有Ruby的代码模板,用Python的凑合了)

1counter = 0
2for i in 0..16107
3  for j in 0..10309
4    counter += 1
5  end
6end
7puts counter

 

粗略测试运行时间结果为:

C#:不到1秒

Python:45秒左右

Ruby:1分33秒左右

 

这个结果让我很吃惊,于是又在同事ArcGIS里面用VBA试了一下,结果是不到2秒循环结束。这种嵌套循环应该在平时的代码中非常常见啊,为什么Python和Ruby会慢的这么离谱?是我的代码哪里写的有问题吗?在CSDN上发了一帖,结果有一位“双星”回复说:“是慢,没办法。尽量别写这样的代码是了。需要速度的时候用C或者C++写扩展吧。”OMG...我不会才用Python一个月就遇到这种语言本身的致命缺陷吧...对我将来“以脚本语言为主,编译语言为辅”的战略规划打击太大了吧...

 

p.s.不好意思的顺便也把Ruby也给连累了...

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[rubyonrails]跟我学之(7)创建数据发布时间:2022-07-18
下一篇:
安装配置RubyforEclipse发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap