我们可以这样做数值迭代:
for i in xrange(10): print i,
以及C风格:
i = 0 while i < 10: print i, i = i + 1
是的,我知道,第一个是不容易出错,更Python,但它是不够快的C风格的版本?附言:我来自C++星球,对Python一级很陌生。
lo8azlld1#
我确信while版本更慢。Python将不得不在循环的每一圈查找整数对象的add操作etc,它不是纯C仅仅因为它看起来像它!如果你想要一个Python版本的上述内容,用途:
while
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
ejk8hzay2#
谁在乎呢?说真的。如果你想知道,使用timeit包(你可以用-m从命令行调用它)。但这并不重要,因为差别可以忽略不计,而且一般来说,Python不是一种你想要速度就可以选择的语言。
jchrr9hc3#
第一个。你的意思是,更快的发展,对不对?PS:没关系,现在的机器速度太快了,在使用全面的分析器识别瓶颈之前,考虑微观优化是毫无意义的。
a7qyws3x4#
他们是都避免:-)一般来说,每次我看到对数字的迭代时,我都会看到一些非Python代码,它们可以通过对列表或生成器的迭代以更好的方式表示。实际上,我说的是“Python”,但它是关于可读性的。使用惯用代码将提高可读性,最终也提高性能,因为编译器将更好地知道如何优化它。
yvt65v4c5#
如果程序太慢,请尝试使用psyco。不要担心你的问题中的微观优化。编写可维护的程序(包括遵循标准的Python风格,以便其他程序员更容易阅读)。
kognpnkq6#
在Python中,越短越清晰的版本总是越好,如果我没弄错的话,range和xrange函数不是原生的,如果你尝试xrange(sys.maxint+1),你会得到一个溢出错误。此外,这到底有什么用呢?如果你只是打印10个数字,那么可读性肯定要高出1000倍--而且我不认为你会打印超过100万个数字......
kokeuurv7#
如果你追求数值代码的效率,你应该使用numpy和scipy,你的积分可以很快写成numpy.sum( numpy.arange( 10 ) )
numpy.sum( numpy.arange( 10 ) )
7条答案
按热度按时间lo8azlld1#
我确信
while
版本更慢。Python将不得不在循环的每一圈查找整数对象的add操作etc,它不是纯C仅仅因为它看起来像它!如果你想要一个Python版本的上述内容,用途:
编辑:我的计时是这样的,这只是一个愚蠢的循环,没有打印,只是为了告诉你在Python中写出“i += 1”等需要花费多少。
ejk8hzay2#
谁在乎呢?说真的。如果你想知道,使用timeit包(你可以用-m从命令行调用它)。
但这并不重要,因为差别可以忽略不计,而且一般来说,Python不是一种你想要速度就可以选择的语言。
jchrr9hc3#
第一个。
你的意思是,更快的发展,对不对?
PS:没关系,现在的机器速度太快了,在使用全面的分析器识别瓶颈之前,考虑微观优化是毫无意义的。
a7qyws3x4#
他们是都避免:-)
一般来说,每次我看到对数字的迭代时,我都会看到一些非Python代码,它们可以通过对列表或生成器的迭代以更好的方式表示。
实际上,我说的是“Python”,但它是关于可读性的。使用惯用代码将提高可读性,最终也提高性能,因为编译器将更好地知道如何优化它。
yvt65v4c5#
如果程序太慢,请尝试使用psyco。
不要担心你的问题中的微观优化。编写可维护的程序(包括遵循标准的Python风格,以便其他程序员更容易阅读)。
kognpnkq6#
在Python中,越短越清晰的版本总是越好,如果我没弄错的话,range和xrange函数不是原生的,如果你尝试xrange(sys.maxint+1),你会得到一个溢出错误。
此外,这到底有什么用呢?如果你只是打印10个数字,那么可读性肯定要高出1000倍--而且我不认为你会打印超过100万个数字......
kokeuurv7#
如果你追求数值代码的效率,你应该使用numpy和scipy,你的积分可以很快写成
numpy.sum( numpy.arange( 10 ) )