有这么一个问题,如何优雅的实现一个函数,当参数 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)
相关文章
暂无评论...