python的性能如何

qidong 2003-12-25 01:25:24
在本站上阅读了一些关于python的文章,对这个语言有了点初步的了解,也很想试用一下。
想请教各位高手,python的运行性能如何?
能否生成可执行的.exe文件,还是象java一样要安装个jdk一类的什么东东才能运行吗?
我先谢谢大家了:)
...全文
974 34 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
谢继雷 2004-02-13
  • 打赏
  • 举报
回复
Python的运行速度并不慢,但启动速度比较慢。不信可以装一个viewcvs(cvs 的web端)试试。相较而言,perl快多了。
iBear 2004-02-13
  • 打赏
  • 举报
回复
我简单试了一下, 百万的加法运算在2秒以内, 千万的要15秒左右
不是很精确, 我只是在editplus中执行py, 然后看它花费的时间而已

如果嫌它不够快, 关键的部分可用c重写
lanzhengpeng2 2004-02-10
  • 打赏
  • 举报
回复
Python的运算结果直接能用,而这段C程序好像就是打印了一串字符串,请问这算解决问题了吗?
运算结果当然能直接用,不然,RSA加密就无法被普遍运用了。打印出字符串,目的是证明:他的运算结果是正确的,是可检验的。
既然大数运算都有了,那么,你再用Python写个RSA加密看看就知道了(如果Python已经提供了RSA加密,算我放屁)。
wti 2004-02-01
  • 打赏
  • 举报
回复
我喜欢python,比较简单
但是,书和资料少了点,比如说用wxpython,文档太简陋。
c和java这类语言的资料就多的多。
flymoon 2004-02-01
  • 打赏
  • 举报
回复
其实Python也好,C也罢,工具而已,重要的是解决问题。用C也可以写批处理,但是又有谁在这么干呢?所以我们才会有Python。
shhgs 2004-01-31
  • 打赏
  • 举报
回复
大家的火气真是越来越大了。

其实Python是用C写的,所以如果你追求速度,肯定还是用C快。但是相比其他的脚本语言,以及与它比较接近的Java,它的性能还是很不错的。我写这个程序只想说明:

1. Python的性能并不差,即便与C相比也没到“不可接受”的地步。
2. Python编程非常方便。

就那这段程序来来讲,Python的代码非常简单,只要学过两个小时编程,一个小学生就能写了。但是我相信lanzhengpeng2(兰征鹏)至少也是一个有着好几年经验的C程序员了,但是为了这么一个如此简单的问题,用了两天时间找这个类库,好像性能也没有好到哪里。请问值得吗?Python的运算结果直接能用,而这段C程序好像就是打印了一串字符串,请问这算解决问题了吗?这个类库,相信你以前从没用过,不知道下次是什么时候用,请问到时候会不会再重新找一遍呢?

其实Python也好,C也罢,工具而已,重要的是解决问题。用C也可以写批处理,但是又有谁在这么干呢?所以我们才会有Python。
jnut 2004-01-31
  • 打赏
  • 举报
回复
是c++吧,几分钟搞定。
to 行者:c++的标准库非常丰满的,c的代码已经涵盖了世界上所有的应用,只是找到的问题。python是调用c库,用python的代码对象调用c还得需要python的c库,为什么不用c通过pythonobject调用python呢?某些算法,图形,显示,用python来做。
lanzhengpeng2 2004-01-31
  • 打赏
  • 举报
回复
那么请问你找这个子程序,再加上学习它的用法,又需要多少时间呢:
找这个子程序用了我不少时间。类似这样功能的程序不少,效率高的不多。我当时找了估计有10来个这样的程序,通过一个个比较,最后选择现在这个。花费我有两天的时间。
学习他的用法就谈不上了。此函数原型是这样的:
void NN_Mult(ULONG *,ULONG *,ULONG *,size_t);
非常简单。

事实上,只要是C库,都可以用Python调用:
得了吧你!你写过Python扩展吗?没有写过就不要在这里废话。写过就不会说这话了。

C当然会花费更多的学习时间,就算熟悉了后,要完成相同简单的功能,也会花更多的时间完成代码。可是,当有新功能要实现的时候,C随时都可以用,python呢?只能等别人写好了,然后还要等别人发慈悲写成Python的扩展.
arya 2004-01-31
  • 打赏
  • 举报
回复
那么请问你找这个子程序,再加上学习它的用法,又需要多少时间呢?就这个例子来说,我们谈的都是直接使用语言和标准库的方便。要是使用非标准库,那就没有比较的基础了。事实上,只要是C库,都可以用Python调用。所以你这个例子毫无比较的价值可言。
lanzhengpeng2 2004-01-30
  • 打赏
  • 举报
回复
用Python,20秒搞定,用C,少说一点,两个小时。你选哪个?
我选C!
因为我写这个程序,用时也就5到6分钟!
你会说不可能——这主要是由于你的思维定式造成的。一提到C,绝大部分人就认为,用C写代码,就应该从最小地方做起(造车必先造轮子)。其实,这个世界上的C代码,得用百亿行代码来计算,什么样的代码没有?所以,写C程序的人,可以非常容易找到满足自己要求的代码。比如我这个程序:
{
cout << "20000! = ";
size_t t = timeGetTime();
NN_DIGIT m[2*NN_DIGITS_LEN],n[2*NN_DIGITS_LEN];
memset(n,0,sizeof(n));
memset(m,0,sizeof(m));
m[0] = 1;
for(int x=2; x<20000; ++x)
{
n[0] = x;
NN_Mult(m,m,n,NN_DIGITS_LEN);
}
t = timeGetTime() - t;

for(x=2*NN_DIGITS_LEN-1; x>=0 && m[x] == 0; --x);
for(; x>=0; --x)
printf("%8.8X",m[x]);
cout << endl << "cost time = " << t << "ms" << endl;
_getch();
return 0;
}
这要几分钟时间?
lanzhengpeng2 2004-01-30
  • 打赏
  • 举报
回复
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
cost time = 1536ms
lanzhengpeng2 2004-01-30
  • 打赏
  • 举报
回复
shhgs():
你的观点太可笑了。
demonstrate(demonstrate):
你的什么机器?
我的计算P3 667:15xxms

20000! = 000008E01CA91892B127B4C1682E8472F77253CCED7E6D9C87E295AD40D8B16E468B52E
8D308AFFFDF11433F0F581F1C343EA266395D39C434BB430ACBC09396E38D091892398E5C1BBB1A1
F875CA0CA734E608A9BA068CBC4498E46BC90FA6DDB1F665AC5FC9BFE91BF202D33F933DD8393054
BCA8B43CB19E5F6A7CA56BF2BCC9C6ADD0B68402B09BF4BF5840FF29005FFD2C1239F878172B2827
B3206E0AEFE7D99D552103EF46889158E88E5039F3F7D38DEF53186BC7C1113C13C4FF3399BF0895
6A114AC0123250AECF4147971F45F5FC7AA8B54FF71E2597A292BBBDDA15431AAFF56CA43181C007
EA4678BE6434A7DC3F43C5D7176BE067A0B250F7B679D5859B798A1E9BDD3A715656A237686D120A
4C69CF8C4835AD2EAC6C14470E1FAC0D02D9ACE58F9E93F3E181DF91CDFCAAD61FA537162B7EACC1
870FC5CB76315BC3EE0305FEC67CB8FA211B391DB17759A476249A49B1135CB4EC381D4DE973AC68
DD5AEB370788935266895367681DA3318BE6123430EDFA4511EBEFD06446E8759DB69AE9F527AAEE
4D7B15BC68169BF88F8EA403D395CBB253E2F9FD74EEA457EFE1F054B967B56367E30D48FFDEC0AB
3249B92B89A116E01D47BF7789676CB08FB3886F7E28ECAF2B453B2AACF6C92020EA1E5529F14567
61A577092D89E25959C65AA33E6FD3F170024D386AF4083B366CCA385E341D3B9637D4F4577F7874
26BF6BECC615FDFCD3062D947CEAD5398A6B0D6CC06818B58C46BA04EE420800FFA07A685F92C8C6
5CB56E5DDCDEF97D8A2C31B040B5A1D9AAA943214FDF6CBF3D4E57B629656B2E862793A9C00155A5
7CCD4BE0D62A32C2E5B39E3F677CC4AD375F017E238DE0845F399299EB3EA9109AC397B4924EB968
F40EB21C2DFD779016DDD75B23377137859172671D06224C709FB82C36E99C11868A6124F6EAFCE4
B77E843C28E67F4B66D3E3F038BE271905F1EFF4AA867F7B570B8AF253C56230C7009487B257FA79
D7EBDBA94034C3F8D2E20AF75730B5A853645DF68309796C738292B2A319489342BB41DCDE5AA30D
92534E1CC2DFFFC458F6BB953BA458C0915EA46C450E754A39C8BF7ADE0A6BE61023972FA227FEFD
49EC128C54D00FB7579DC0A52FCDBBD7B0DC91A4490B3FB66E209D7B99EFBA4B2C86C39FE2C61FE9
7AD363FF8B01B84E25A68D8AFDB098ABD18DD5E1C887237145066A5EF5BD74E4651FEAD18777CBFD
61889FA9A1F634A356B6A93EA75FA6632FA3D8F52FB923B71BF625C1E92F96A64752C7F74A5B65F1
7368F14AA4CB9CF488DE05F2D53003AAF550FDCCFC10D0D7C54633B691CE74123F728D3C3A7FEBCF
A102A2D8ED0D574BECA97164D2DC082E07B0D90567A06DA00FA6089EB74520A0DE82A38A19F94A69
F55B28DF52DB306E7B9BB9123ABF45A4F4475226FE2D0CA41272122E735C8CD5D60FBD02E2DD1A76
566552E32139E3816D9122CFC234191EB4BE0843DB5FFE7C6BCF3AB9118F0E060263D3A46BA50EA3
761A83DDA92DEFCAC7109792594CA8C390ED375339437E5DDB1ECDEF488B03905D6B7877DE881B3A
5614E390F378D7EE98C899B8640093AB64B7CCA53216F287C618DB0513CCE69E3EC15E02F4A85A63
1C9594A7F5A64B1888734200B9148848A12E50D1018E1D18A7A01909EC7D8B83C7D8B62FF701692C
E44A5F484296BFE0F063B6519B3A160D7A4A6573F7D9BF3A60F5ADE86245790BF697A0B2F3B83BB9
6D86B0DD79E2267031FB2C6318C34CA59D87124C08AEA2C6BB4BEF85AA1A6F137672FCDDE4E8420B
BFA080FC8830F5177898B595EE80A7B1B5A28FE18959262A26893B190FD43C1026CF97E62638A075
1662949C70ACF6EABF024928D7C33740E1F10934EC08560705AFAB7397F97054151C743D622E1EB3
FE85B6774C9C7F9F5C4A05FFDFF46399AE9B67E5C9E5D71B68828B4B9AB2EAB34CEFCCE230EFA629
336BD67E5254611BD324EAAA3F1003C3BDDAD6B04EBEE685EAD672EA7DF387812864134E550B1AEF
F4426B0898F0541881CEF9FD8F63C23ACB1C0A2216168755EC90BA0DDA822FF7EA905EE8850AA4FB
4484E1AF74120A257DA2F61D93E9BCC2AF5ED298DECDF80B98329A2B11009D785CC40AF064DF0696
5E7CE45589C19A4B26BFF98FF51A5757B3E8CB47BD0630A40281365E866178F99902D882565A893D
8C8D07FA310B823DA16F3C91790AC09C7E935885C030CC022AB8A4E4F9D064D4FF5F5040E6BE1D89
6105FD2CB83C00000000000000000000000000000000000000000000000000000000000000000000
demonstrate 2004-01-26
  • 打赏
  • 举报
回复
你们是算的精确值还是近似值??
我的C++程序算了3秒,不过是精确的,不知是不是很慢了
你们有什么好的算法吗?
ThinkX 2004-01-24
  • 打赏
  • 举报
回复
python有良好的扩展性,python + C/C++是个不错的开发方式。
BitTorrent有很多版本都是python写的。
arya 2004-01-23
  • 打赏
  • 举报
回复
加上Psyco, python程序基本不用改一行,性能就能提高一个数量级,超过其它脚本语言。
taowen2002 2004-01-22
  • 打赏
  • 举报
回复
大家对于性能都说了很多了。我觉得运行的问题也是没有的,用过BT下载没有?那个东西就是用python写的。而且有一个py2exe的库,能够用来把源代码变成exe直接安装,简便易学。
shhgs 2004-01-19
  • 打赏
  • 举报
回复
其实用阶乘来衡量语言的性能并不是很科学,不过还是能说明一些问题的。
# Factorial.py
def timer(func, n, comment=""):
from time import clock
start = clock()
func(n)
print "consumes %.2f seconds" % (clock()-start)

def factorial(x) :
result = 1
for i in range(1, x+1) :
result *= i
return result

if __name__ == "__main__" :
timer(factorial, 20000, "Calculation of 10000!")

// Factorial.java
import java.math.BigInteger;

public class Factorial {
public static void main(String[] args) {
BigInteger result = new BigInteger("1");
long t1 = System.currentTimeMillis();
for ( int i = 1; i < 10000; i ++)
result = result.multiply(new BigInteger("" + i));
System.out.println(System.currentTimeMillis() - t1) ;
//System.out.println(result);
}
}

说明一下,我没有打印运算的结果,因为这部分属于I/O,java的性能更差。在我的机器上,用Python计算20000的阶乘时用了2.05秒左右,用java计算10000的阶乘时,耗时2.15秒左右,计算20000的阶乘时耗时9.05秒。此外还要指出,java的测试程序用了一种最简单的方法,如果按照Python的做法,先定义一个类,再把这个类的实例传给测试的framework,性能只低不高。

再说几句Python和C的比较。Python的后台实际上就是C,而且是充分优化的,所以就一般的应用,它的性能不至于到不可接受的地步。还是拿阶乘举例,到100之后,结果就已经溢出了,所以肯定要做特别处理的。这种程序不是谁都能轻轻松松写出来的,即便写出来了,性能也未必有Python的好。即便写出来了又怎么样?用Python,20秒搞定,用C,少说一点,两个小时。你选哪个?
xdspower 2004-01-19
  • 打赏
  • 举报
回复
我是说你自己编一个,比如用java来算,用其他脚本来算,c++是脚本语言?!
jnut 2004-01-19
  • 打赏
  • 举报
回复
好像没有比python更慢的了,可能只有shell吧。

那个10000000的计算,你用c++试试
xdspower 2004-01-18
  • 打赏
  • 举报
回复
你用一个程序计算10000000!你看有没有比python快的?!
加载更多回复(14)

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧