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

Ell*_*sky 2 python iteration iterator loops python-3.x

假设我有一个表单的功能

def foo(times=None):
    iterator = range(times) if times else itertools.count()
    for _ in iterator:
        # do stuff
Run Code Online (Sandbox Code Playgroud)

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

Art*_*yer 6

首先,如果您没有使用变量,因为它似乎与您使用_的名称一样,请使用itertools.repeat(None),因为它更接近您想要做的,并且它的效率非常高.

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

def foo(*times):
    for _ in itertools.repeat(None, *times):
        # do stuff
Run Code Online (Sandbox Code Playgroud)

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

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

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