循环为`times`如果`times不是None`则永远循环

时间:2017-06-19 17:20:30

标签: python python-3.x loops iterator iteration

假设我有一个

形式的函数
def foo(times=None):
    iterator = range(times) if times else itertools.count()
    for _ in iterator:
        # do stuff

是否有更多的Pythonic或优雅方式来实现这一目标?

1 个答案:

答案 0 :(得分:6)

首先,如果您没有使用变量,因为看起来就像使用_作为名称一样,请使用itertools.repeat(None),因为它更接近您想要做的事情,它的效率非常高。

如果您已经在使用itertools.repeat,请使用第二个times参数:

def foo(*times):
    for _ in itertools.repeat(None, *times):
        # do stuff

如果您不想破坏签名,可以这样做:

def foo(times=None):
    for _ in itertools.repeat(*((None, times) if times is not None else (None,))):
        # do stuff

这看起来不那么优雅,但可以防止你意外地提供过多的args。