关于python:python-and-运算符的妙用优雅的切换-range-和-count

6次阅读

共计 611 个字符,预计需要花费 2 分钟才能阅读完成。

有这么一个问题,如何优雅的实现一个函数,当参数 limit 为 0 的时候,应用有限迭代,当 limit 大于 0 的时候,无限迭代:

间接解谜后果:

from loguru import logger
from itertools import count


def func(limit: int = 0):
    for i in limit and range(limit) or count():
        yield i


for i in func():
    logger.debug(i)

如果你对这个 limit and range(limit) or count() 语法不了解,能够先看看官网文档: 布尔运算 — and, or, not

咱们来一点点解析这个语法:

当 limit 为 0 的时候,咱们来看看是个什么状况吧:

In [8]: limit=0

In [9]: limit and range(limit)
Out[9]: 0

能够看到,当 limit 不成立的时候,limit and range(limit) 的后果就是 limit

In [12]: from itertools import count

In [13]: 0 or count()
Out[13]: count(0)

当 limit 成立的时候,limit and range(limit) 就是后者

In [14]: limit=10

In [15]: limit and range(limit)
Out[15]: range(0, 10)
In [16]: range(0, 10) or count()
Out[16]: range(0, 10)
正文完
 0