我们可以像这样进行数字迭代:
for i in xrange(10):
print i,
在 C 风格中:
i = 0
while i < 10:
print i,
i = i + 1
是的,我知道,第一个更不容易出错,更 Pythonic,但它是否足够快作为 C 样式版本?
PS。我来自 C++ 星球,对 Python 来说还很陌生。
我们可以像这样进行数字迭代:
for i in xrange(10):
print i,
在 C 风格中:
i = 0
while i < 10:
print i,
i = i + 1
是的,我知道,第一个更不容易出错,更 Pythonic,但它是否足够快作为 C 样式版本?
PS。我来自 C++ 星球,对 Python 来说还很陌生。
我确定while
版本较慢。Python 将不得不在循环的每一轮等上查找整数对象的加法操作,它不是纯 C 只是因为它看起来像它!
如果你想要上面的 Pythonic 版本,请使用:
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
谁在乎?严重地。如果您想知道,请使用 timeit 包(您可以使用 -m 从命令行调用它)。
但这根本不重要,因为差异可以忽略不计。通常,如果您想要速度,Python 不是您选择的语言。
第一个。
你的意思是,发展得更快,对吧?
PS:没关系,如今的机器速度如此之快,以至于在使用彻底的分析器识别瓶颈之前考虑微优化毫无意义。
他们都是要避免的:-)
一般来说,每次我看到对数字的迭代时,我都会看到一些非 Python 代码,这些代码可以使用对列表或生成器的迭代以更好的方式表达。
实际上,我说的是“pythonic”,但都是关于可读性的。使用惯用代码将提高可读性,并最终提高性能,因为编译器会更好地知道如何优化它。
如果您的程序太慢,请尝试使用psyco。
不要担心你的问题中的那种微优化。编写可维护的程序(包括遵循标准 Python 风格,以便其他程序员更容易阅读)。
在 Python 中,更短更清晰的版本总是更好。如果我没记错 range 和 xrange 函数不是原生的,如果你尝试 xrange(sys.maxint+1) 你会得到一个溢出错误。
此外,这到底有什么用?如果您只打印 10 个数字,那么可读性肯定会增加一千倍——而且我认为您不会打印超过一百万个数字......