3 回答
TA贡献1858条经验 获得超8个赞
您正在编写代码,就好像接收值并发送值一样。这不是它的工作方式。所有收益都发送一个值并接收一个值。(yield)yield whatever
当生成器执行时,它分两个阶段执行。首先,的参数成为当前或调用的返回值,生成器暂停执行。如果没有参数,则使用。这就是你的s来自哪里yieldyieldnextsendNoneNone
其次,当执行另一个 或 时,生成器将取消暂停,并且参数(或者如果使用)将成为表达式的值。nextsendsendNonenextyield
您正在尝试使用一个来接收参数,并使用另一个来设置 的返回值。你需要使用一个 single 来设置一个返回值并接收下一个 的参数。例如yieldsendsendyieldsendsend
def get_square():
number = 0
while True:
number = yield number**2
或者,如果要使用单独的 s 在生成器端发送和接收值,则需要使用单独的(或)调用在另一端接收和发送值,并忽略 s。例如yieldsendnextNone
w.send(num)
num = next(w)
而不是 ,所以看起来像num = w.send(num)operations_pipeline
def operations_pipeline(numbers, operations, print_acum):
for num in numbers:
for w in operations:
w.send(num)
num = next(w)
print_acum.send(num)
for operation in operations:
operation.close()
print_acum.close()
TA贡献1806条经验 获得超8个赞
def rooter():
number=0
while True:
number= yield math.floor(math.sqrt(number))
def squarer():
number=0
while True:
number= yield number**2
产量将给没有尝试这种方式
def accumulator():
number=0
while True:
number+= yield number
TA贡献1827条经验 获得超8个赞
我相信你需要在这里的代码中添加一个调用:nextoperations_pipeline
def operations_pipeline(numbers, operations, print_acum):
for num in numbers:
for i, w in enumerate(operations):
num = w.send(num)
next(w) # <<<--- this
没有这个,我不相信它会回到第二次,假设你的第一个输入是。get_square[square, accumulate]
添加回答
举报