在Python中,“while”和“for xrange”哪个更快

nkhmeac6  于 2022-12-25  发布在  Python
关注(0)|答案(7)|浏览(150)

我们可以这样做数值迭代:

for i in xrange(10):
    print i,

以及C风格:

i = 0
while i < 10:
    print i,
    i = i + 1

是的,我知道,第一个是不容易出错,更Python,但它是不够快的C风格的版本?
附言:我来自C++星球,对Python一级很陌生。

lo8azlld

lo8azlld1#

我确信while版本更慢。Python将不得不在循环的每一圈查找整数对象的add操作etc,它不是纯C仅仅因为它看起来像它!
如果你想要一个Python版本的上述内容,用途:

print " ".join(str(i) for i in xrange(10))

编辑:我的计时是这样的,这只是一个愚蠢的循环,没有打印,只是为了告诉你在Python中写出“i += 1”等需要花费多少。

$ python -mtimeit "i=0" "while i < 1000: i+=1"
1000 loops, best of 3: 303 usec per loop
$ python -mtimeit "for i in xrange(1000): pass"
10000 loops, best of 3: 120 usec per loop
ejk8hzay

ejk8hzay2#

谁在乎呢?说真的。如果你想知道,使用timeit包(你可以用-m从命令行调用它)。
但这并不重要,因为差别可以忽略不计,而且一般来说,Python不是一种你想要速度就可以选择的语言。

jchrr9hc

jchrr9hc3#

第一个。
你的意思是,更快的发展,对不对?
PS:没关系,现在的机器速度太快了,在使用全面的分析器识别瓶颈之前,考虑微观优化是毫无意义的。

a7qyws3x

a7qyws3x4#

他们是避免:-)
一般来说,每次我看到对数字的迭代时,我都会看到一些非Python代码,它们可以通过对列表或生成器的迭代以更好的方式表示。
实际上,我说的是“Python”,但它是关于可读性的。使用惯用代码将提高可读性,最终也提高性能,因为编译器将更好地知道如何优化它。

yvt65v4c

yvt65v4c5#

如果程序太慢,请尝试使用psyco
不要担心你的问题中的微观优化。编写可维护的程序(包括遵循标准的Python风格,以便其他程序员更容易阅读)。

kognpnkq

kognpnkq6#

在Python中,越短越清晰的版本总是越好,如果我没弄错的话,range和xrange函数不是原生的,如果你尝试xrange(sys.maxint+1),你会得到一个溢出错误。
此外,这到底有什么用呢?如果你只是打印10个数字,那么可读性肯定要高出1000倍--而且我不认为你会打印超过100万个数字......

kokeuurv

kokeuurv7#

如果你追求数值代码的效率,你应该使用numpyscipy,你的积分可以很快写成numpy.sum( numpy.arange( 10 ) )

相关问题