V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
happywowwow
V2EX  ›  Python

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

  •  1
     
  •   happywowwow · 2014-08-11 16:59:30 +08:00 · 3497 次点击
    这是一个创建于 3783 天前的主题,其中的信息可能已经有所发展或是发生改变。

    从效率上和空间上说,使用循环的时候选择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

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

    10 条回复    2014-08-19 09:10:02 +08:00
    casparchen
        1
    casparchen  
       2014-08-11 17:11:37 +08:00
    应该是差不多的. 另外,为什么要把时间用在纠结这些问题上?
    happywowwow
        2
    happywowwow  
    OP
       2014-08-11 17:14:43 +08:00
    @casparchen 不是在纠结,只是想偷懒伸手问问来满足我的好奇心
    实际想怎么写怎么写 不过pythoner不是会有想着如何把代码写的更pythonic的吗
    imn1
        3
    imn1  
       2014-08-11 17:25:11 +08:00
    py3就用range
    for i in range(num) 足矣,尤其是 i 不参与计算的情况
    while 用在不确定次数循环更好
    hahastudio
        4
    hahastudio  
       2014-08-11 17:32:38 +08:00   ❤️ 1
    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
        5
    yangg  
       2014-08-11 18:01:36 +08:00
    你是要用 xrange(num) 吧.
    pimin
        6
    pimin  
       2014-08-11 18:07:30 +08:00 via iPhone
    我的回答是,没有区别。编译器/虚拟机会对循环做相同的优化处理,从机器角度来看,完全是一回事。
    happywowwow
        7
    happywowwow  
    OP
       2014-08-11 18:07:50 +08:00
    @imn1 我想知道的是why
    happywowwow
        8
    happywowwow  
    OP
       2014-08-11 18:09:23 +08:00
    @hahastudio 啊,这下知道了。看来两者还是有区别的。
    happywowwow
        9
    happywowwow  
    OP
       2014-08-11 18:10:14 +08:00
    @yangg python2里range和xrange是有差的,python3里没有了xrange的方法,且range的实现和python2的xrange一样了
    mengzhuo
        10
    mengzhuo  
       2014-08-19 09:10:02 +08:00
    Cpython中
    for优化得比while好
    for 每个循环还会自动gc, while不会,所以for很适合大数

    xrange和range只是迭代器的问题,如果数字小,range快
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5091 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 125ms · UTC 09:31 · PVG 17:31 · LAX 01:31 · JFK 04:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.