我已经在python中为itertools.cycle创建了以下仿真器功能。
def cycle1(s):而True:为我在s:让我
但是,我不确定为什么以下内容会产生语法错误:
def cycle2(s):返回(i为,而s为True)
为什么在理解列表时不能使用?如何在列表理解中产生无限循环?
谢谢。
这会引发错误,因为该语法未在Python中定义!您可以尝试:
class MyGenerator:
def __init__(self,s):
self.s = s
self._ix = None
def __iter__(self):
return self
def __next__(self):
if self._ix is None:
self._ix = 0
self._ix = (self._ix + 1) % self.s
return self._ix
g = MyGenerator(5)
for i in range(20):
print(next(g))
为什么我不能在[理解和生成器表达式的语法]中使用
while
?
只是没有定义能以这种方式工作。如果有明确的建议(PEP)和足够的需求,也许将来的版本可能会支持它。
如何在列表理解范围内产生无限循环?
带有for
子句的循环了一些无界生成器。 itertools
提供了以下几个:count
(不断产生递增的数字)和repeat
(保持基调产生相同的值,除非提供显式计数)。另外,您也可以从内置的iter
中自行构建它:
>>> help(iter)
Help on built-in function iter in module builtins:
iter(...)
iter(iterable) -> iterator
iter(callable, sentinel) -> iterator
Get an iterator from an object. In the first form, the argument must
supply its own iterator, or be a sequence.
In the second form, the callable is called until it returns the sentinel.
第一个版本显然无济于事,但第二个版本,我们需要的是一个可返回值的可调用对象和一个不同值的哨兵值。例如。 iter(lambda: True, False)
。