从我的角度来看,我经历了一些奇怪的事情
我需要像这样交替生成 True 和 False 值:
False, True, False, False, True, True, False, False, False, True, True, True, False, False, False, False, True, True, True, True, ...
我需要得到一个 False,一个 True,然后两个 False,两个 True,然后三个False,三个True等
在我看来,在函数中使用 yield 关键字是实现此目标的好方法:
def generateFalseTrueRangesAlternatively(limit):
limitForChange = 0
index = 0
rv = True
for i in range(0, limit):
if index == limitForChange:
rv = not rv
index = 0
if not rv:
limitForChange += 1
index += 1
yield rv
for i in range(0,4):
g = generateFalseTrueRangesAlternatively(20)
print(next(g))
但我只得到 False 值:
False
False
False
False
作为解决方法,我编写了以下代码,它生成了一个列表:
def generateFalseTrueRangesAlternativelyList(limit):
limitForChange = 1
index = 0
rv = False
out = []
for i in range(0, limit):
if index == limitForChange:
rv = not rv
index = 0
if not rv:
limitForChange += 1
index += 1
out.append(rv)
return out
l = generateFalseTrueRangesAlternativelyInList(6)
for i in range (0,6):
print(l[i])
哪些输出:
False
True
False
False
True
True
问题
我的 generateFalseTrueRangesAlternatively 函数有什么问题?
如何修改它使其表现得像 generateFalseTrueRangesAlternativelyInList 但不创建列表?
yield 用法有什么我不明白的吗?
实际上,我的好奇心需要通过回答这个基本问题来满足:为什么?
(我的 Python 版本:3.5.4)
请您参考如下方法:
你的代码没问题;生成器的用法是错误的。
只是迭代它:
for i in generateFalseTrueRangesAlternatively(20):
print(i)
