Python跺脚屈服

2024-03-29 09:53:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用Python Stompest库生成到达时的帧时遇到了问题。当我在函数中包含yield关键字时,代码不会像应该的那样阻塞和等待帧。你知道吗

def receive(stomp):
    received_messages = 0
    while True:
        frame = stomp.receiveFrame()
        stomp.ack(frame)
        yield frame.body

但是,如果我所做的只是打印框架主体,那么它会像应该的那样等待

def receive(stomp):
    while True:
        frame = stomp.receiveFrame()
        stomp.ack(frame)
        print frame.body

在这种情况下使用yield有什么问题吗?你知道吗


Tags: 函数代码truedefbody关键字framereceive
1条回答
网友
1楼 · 发布于 2024-03-29 09:53:14

当你把yield放在一个函数中时,它就变成了一个返回生成器的函数,只有在某种迭代或理解中需要生成器时,才会对生成器进行延迟计算。在你给的第一个案子里

>> x = receive(stomp)
>> type(x)
<type 'generator'>

要使生成器x实际执行某些操作,可以执行以下操作:

for frame in x: print(frame)

当您在生成器上迭代时,它将实际执行您定义的函数中的语句(包括阻塞,直到帧到达),并为每次迭代返回帧。使用yield创建一个生成器对象可以省去实现状态以手动记住所进行的迭代的麻烦。你知道吗

相关问题 更多 >