Coding style python中带条件的循环

Coding style python中带条件的循环,coding-style,python,idioms,Coding Style,Python,Idioms,考虑C中的以下代码: for(int i=0; i<10 && some_condition; ++i){ do_something(); } 重要澄清 some_condition不是在循环期间计算的,而是指定是否首先启动循环 我指的是蟒蛇2.6 你喜欢哪种款式?有更好的习惯用法吗?一般来说,“范围+中断”样式是首选的-但是在Python2.x中,使用范围而不是范围进行迭代(这会根据需要创建值,而不是实际创建数字列表) 但这要视情况而定。在这种情况下,数字10有

考虑C中的以下代码:

for(int i=0; i<10 && some_condition; ++i){
    do_something();
}
重要澄清

  • some_condition
    不是在循环期间计算的,而是指定是否首先启动循环

  • 我指的是蟒蛇2.6

  • 你喜欢哪种款式?有更好的习惯用法吗?

    一般来说,“
    范围
    +
    中断
    ”样式是首选的-但是在Python2.x中,使用
    范围
    而不是
    范围
    进行迭代(这会根据需要创建值,而不是实际创建数字列表)

    但这要视情况而定。在这种情况下,数字10有什么特别之处?什么是某个条件?等等

    对最新情况的答复:

    听起来好像
    某些条件
    是一个“循环不变量”,即在循环过程中不会改变。在这种情况下,我们应该首先测试它:

    if some_condition:
      for i in xrange(10):
        do_something()
    

    for
    具有常量上限的循环在Python中有点少见。如果您正在迭代
    somearray
    ,您可能会执行以下操作:

    for i in xrange(len(somearray)):
        if not some_condition:
            break
        do_sth_with(i, somearray[i])
    
    或者更好:

    for i, item in enumerate(somearray):
        if not some_condition:
            break
        do_sth_with(i, item)
    

    这可能没有关系,但我习惯于这样做。。。如果
    some_条件
    足够简单,则将其放入函数中,并
    过滤您迭代的项目:

    def some_condition(element):
        return True#False
    
    for i in filter(some_condition, xrange(10)):
        pass
    
    在迭代某些元素列表时,也可以使用这种方法

    selected = filter(some_condition, to_process)
    for i, item in enumerate(selected):
        pass
    

    同样,这可能不是您的情况,您应该根据您的问题选择过滤项的方法。

    我认为这是个人偏好的问题。Python的哪个版本?我认为Python应该有一个类似于
    do times:
    ,,卡尔:
    for.in range(10)
    似乎是表示这一点的常用方法,但如果您碰巧使用了gettext,这当然是一个可怕的想法。10和range只是示例,这可能是我在数组中的i的
    。正如问题中所阐明的,
    some_condition
    控制程序是否需要执行循环或跳过循环。您的版本非常简单且有效。我只是想省去额外的缩进。谢谢你,或者,让它更简短,可读性更低:
    for i in filter(lambda x:True,range(10)):do_something()
    def some_condition(element):
        return True#False
    
    for i in filter(some_condition, xrange(10)):
        pass
    
    selected = filter(some_condition, to_process)
    for i, item in enumerate(selected):
        pass