【发布时间】:2019-07-14 15:31:36
【问题描述】:
我想改变下面生成器的行为,使其只产生偶数。我怎样才能做到这一点?
我知道有更简单、更聪明的方法可以做到这一点。这是一个人为的 HR 挑战,其中
我编写的change_generator 函数没有产生所需的输出。 我只能换change_generator。
我无法更改positive_integers_generator() 也无法更改下面的 for 循环。
我可以用装饰器解决这个问题吗?
#can't change the body of this function
def positive_integers_generator():
n = 1
while True:
x = yield n
if x is not None:
n = x
else:
n += 1
# can only change this function
def change_generator(generator, n):
for i in generator:
if i%2 == 0:
yield(i)
# can't change this code either
# should print 1, 2, 4, 6, 8
g = positive_integers_generator()
for _ in range(5):
n = next(g)
print(n)
change_generator(g, n)
【问题讨论】:
-
我很困惑,你不能更改循环调用代码,但你在我假设的示例中添加了对 change_generator 的调用?
-
@RyanWidmaier:我只能更改
change_generator函数。生成器的定义、它的创建以及循环内的所有代码都应该保持不变。这是一个 HR 挑战问题。 -
1,2,4 之后应该打印什么?循环是 5 长
-
@PatrickArtner:你说得对,应该是 1、2、4、6、8。
标签: python python-3.x generator python-decorators