循环用 while num 还是 for i in range(0, num)

2014-08-11 16:59:30 +08:00
 happywowwow

从效率上和空间上说,使用循环的时候选择while num还是for i in range(0, num)好一些?
如果考虑函数里可能多个循环需要调用某一个数,如下
def func(num):

那么选择while的话我能想到的就是

i = num
while i:
i = i - 1
pass
i = num
while i:
i = i - 1
pass

而如果是for i in range(0, num),那么就是

for i in range(0, num):
pass
for i in range(0, num):
pass

以上默认了python3的range
而python2则是对比while 和 for in xrange

啊哦,怎么代码前面的缩进没有用…

3408 次点击
所在节点    Python
10 条回复
casparchen
2014-08-11 17:11:37 +08:00
应该是差不多的. 另外,为什么要把时间用在纠结这些问题上?
happywowwow
2014-08-11 17:14:43 +08:00
@casparchen 不是在纠结,只是想偷懒伸手问问来满足我的好奇心
实际想怎么写怎么写 不过pythoner不是会有想着如何把代码写的更pythonic的吗
imn1
2014-08-11 17:25:11 +08:00
py3就用range
for i in range(num) 足矣,尤其是 i 不参与计算的情况
while 用在不确定次数循环更好
hahastudio
2014-08-11 17:32:38 +08:00
for i in range(num)
请不要偷懒,请面向 StackOverflow 编程:
https://stackoverflow.com/questions/869229/why-is-looping-over-range-in-python-faster-than-using-a-while-loop
还有我们 Pythoner 从来不写 range(0, num) 这么不 Pythonic 的代码,我们会写
range(n)
yangg
2014-08-11 18:01:36 +08:00
你是要用 xrange(num) 吧.
pimin
2014-08-11 18:07:30 +08:00
我的回答是,没有区别。编译器/虚拟机会对循环做相同的优化处理,从机器角度来看,完全是一回事。
happywowwow
2014-08-11 18:07:50 +08:00
@imn1 我想知道的是why
happywowwow
2014-08-11 18:09:23 +08:00
@hahastudio 啊,这下知道了。看来两者还是有区别的。
happywowwow
2014-08-11 18:10:14 +08:00
@yangg python2里range和xrange是有差的,python3里没有了xrange的方法,且range的实现和python2的xrange一样了
mengzhuo
2014-08-19 09:10:02 +08:00
Cpython中
for优化得比while好
for 每个循环还会自动gc, while不会,所以for很适合大数

xrange和range只是迭代器的问题,如果数字小,range快

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/127256

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX