while循环,永远运行或倒计时

时间:2014-07-18 08:45:05

标签: python optimization

有没有更好的解决方案来编写一个while循环,如果参数为0则永远运行,或者如果参数是任意n大于0,则运行n次:

x = options.num  # this is the argument (read by Optparse)
if x == 0:
    check = lambda x: True
else:
    check = lambda x: True if x > 0 else False
while check(x):
    print("Hello World")
    x -= 1

你可以将lambda合并到:

check = lambda x: True if x > 0 or options.num == 0 else False

但是你仍然需要倒数x,除非你在那之前放了一个if。

5 个答案:

答案 0 :(得分:6)

怎么样:

n = options.num

while (options.num == 0) or (n > 0):
    print("Hello World")
    n -= 1

基本上,如果x == 0或我们只运行n次,我们会有一个无限循环。

答案 1 :(得分:4)

我觉得这很有表现力:

if x==0:
  x = float("inf") # user says 0 but means infinity

while x>0:
   print "something"
   x -= 1

答案 2 :(得分:2)

试试这个

def while_function(n):
    if n > 0: n += 1
    while n-1:
        print "something"
        n -= 1

以下是演示:

>>> while_function(1)
something
>>> while_function(2)
something
something
>>> while_function(0)
something
something
.
.
.

答案 3 :(得分:2)

使用itertools.count

诀窍很简单:

from itertools import count
x = options.num  # this is the argument (read by Optparse)
if x:
    loops = xrange(x)
else:
    loops = count()

for i in loops:
    print("Hello World")

代码在迭代器上运行循环。如果数字不是0,则使用迭代器xrange, 产生x个数字。

如果x为0,我们从count itertools迭代器,它能够无限地回归 数量。

它甚至可以缩短(但我将原始版本保留为可读性):

from itertools import count
x = options.num  # this is the argument (read by Optparse)

for i in xrange(x) if x else count():
    print("Hello World")

答案 4 :(得分:0)

考虑关注可读性而不是代码的最小长度。如果循环的主体是微不足道的,我会写

if x:
  for i in xrange(x):
    print('Hello, World!')
else:
  while True:
    print('Hello, World!')

如果身体足够大,我会提取一个函数

def body():
  print('Hello, World!')

if x:
  for i in xrange(x):
    body()
else:
  while True:
    body()