有没有更好的解决方案来编写一个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。
答案 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()