首先,我想提一下我对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'])
附: receiver
是一个插座接收器。
生成器中的语法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)
;