首先,我想提一下我对Python并不是特别熟悉。我最近被迫熟悉一个代码样本,这样我的下巴半开,我无法“翻译”它。我看过的各种文件和文章都没有帮助:
以下是相关功能的缩短版本:
@coroutine
def processMessage(receiver):
global userID
#...
while True:
msg = (yield)
try:
#...
except Exception as err:
#...
我无法理解它的作用,因此无法“遍历”代码。我的问题是“这个功能有什么作用?”和“这个函数遵循什么序列?”
抛出我的线是msg = (yield)
。我不知道它想要实现什么。 Intuition告诉我它只是在收到新消息时抓取它们,但是我无法理解为什么。如果有人知道,如果我提供了足够的信息,我真的很感激解释。
Try
条款:
if msg['event'] == 'message' and 'text' in msg and msg['peer'] is not None:
if msg['sender']['username'] == username:
userID = msg['receiver']['peer_id']
config.read(fullpath + '/cfg/' + str(userID) + '.cfg')
if config.has_section(str(userID)):
log('Config found')
readConfig()
log('Config loaded')
else:
log('Config not found')
writeConfig()
log('New config created')
if 'username' in msg['sender']:
parse_text(msg['text'], msg['sender']['username'], msg['id'])
P.S。 receiver
是套接字接收器。
答案 0 :(得分:5)
生成器中的语法variable = (yield some_value)
执行以下操作:
some_value
返回给调用它的代码(通过next
或send
); .next
或.send(another_value)
),它会将another_value
分配给variable
并继续执行。例如,假设您有一个生成器函数:
>>> def f():
... while True:
... given = (yield)
... print("you sent me:", given)
...
现在,我们来电话f
。这让我们回到了发电机。
>>> g = f()
我们第一次使用生成器时我们无法发送数据
>>> next(g)
此时它刚刚评估了yield
...当我们现在调用.send
时,它将从那一点继续,将我们发送给它的数据分配给给定的变量
>>> g.send("hello")
('you sent me:', 'hello')
>>> g.send("there")
('you sent me:', 'there')
在您的特定示例代码中,您有一个生成器:
.send(some_msg)
;